hadoop(hdfs+mapReduce+yarn)

条件

准备三台服务器(本文运用虚拟机),安装jdk1.8

装备

本文运用hadoop版本为3.3.0,解压hadoop压缩包到任意目录,以/export/server/hadoop-3.3.0/为例。

解压结束后,进入hadoop目录,修正装备文件,坐落/etc/hadoop/目录下,文本中有关途径和网络地址的装备需求依据实际情况修正

  • 指定java途径,指定各个进程运转的用户名
vim hadoop-env.sh
export JAVA_HOME=/export/server/jdk1.8.0_341
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
  • 中心装备文件,共有四个需求修正
vim core-site.xml
<configuration>
  <!-- 设置默许运用的文件系统 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://192.168.88.128:8020</value>
  </property>
  <!-- 设置Hadoop本地保存数据途径 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/export/server/hadoop-3.3.0</value>
  </property>
  <!-- 设置HDFS web UI用户身份 -->
  <property>
    <name>hadoop.http.staticuser.user</name>
    <value>root</value>
  </property>
  <!-- 整合hive 用户署理设置 -->
  <property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
  </property>
  <property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
  </property>
  <!-- 文件垃圾桶保存时刻 -->
  <property>
    <name>fs.trash.interval</name>
    <value>1440</value>
  </property>
</configuration>
vim hdfs-site.xml
<configuration>
  <!-- 设置SNN进程运转机器位置信息 -->
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>192.168.88.129:9868</value>
  </property>
  <property>
    <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
    <value>false</value>
  </property>
</configuration>
vim mapred-site.xml
<configuration>
  <!-- 设置MR程序默许运转形式:yarn集群形式 local本地形式-->
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>  
  <!-- MR程序前史服务地址-->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>192.168.88.128:10020</value>
  </property>  
  <!-- MR程序前史服务器web端地址-->
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>192.168.88.128:19888</value>
  </property>  
  <property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  </property> 
  <property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  </property> 
  <property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
  </property> 
</configuration>
vim yarn-site.xml
<configuration>
  <!-- 设置YARN集群主人物运转机器位置-->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>192.168.88.128</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <!-- 是否将对容器施行物理内存约束-->
  <property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
  </property>
  <!-- 是否将对容器实虚拟内存约束-->
  <property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
  </property>
  <!-- 敞开日志集合-->
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>
  <!-- 设置yarn前史服务器地址-->
  <property>
    <name>yarn.log.server.url</name>
    <value>http://192.168.88.128:19888/jobhistory/logs</value>
  </property>
  <!-- 前史日志保存的时刻 7天-->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
  </property>
</configuration>
  • 设置集群所在的网络地址
vim workers
192.168.88.128
192.168.88.129
192.168.88.130
  • 将hadoop增加到环境变量
vim /etc/profile
export HADOOP_HOME=/export/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

编译环境变量,source /etc/profile,履行hadoop指令,验证是否装备成功

  • 将hadoop及环境变量文件同步到其他两个节点,履行编译

  • 初始化hdfs 在主节点机器履行hdfs namenode -format,假如呈现storage directory /export/server/hadoop-3.3.0/dfs/name has been successfully formatted,阐明成功

发动

start-all.sh

发动成功后,在浏览器输入namenode所在服务器地址加上9870端口,可检查hdfs办理界面,如192.168.88.128:9870;在浏览器输入namenode所在服务器地址加上8088端口,可检查mapReduce办理界面,如192.168.88.128:8088

问题记载

发动时,报错Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

需求装备免密登录,才可以发动其他服务器下的hadoop服务,参考SSH免密登录装备

hdfs

上传下载指令

注:

  1. 其他常见文件操作指令基本与linux相同,故不记载
  2. 本地途径可直接写途径,也可用前缀file:///指明绝对途径;hdfs途径可直接写途径,也可用前缀hdfs://${namenode}:8020/指明绝对途径
  • 上传文件

hadoop fs -put 本地途径 hdfs途径

  • 下载文件

hadoop fs -get hdfs途径 本地途径

问题记载

运用start-dfs.sh发动,控制台显现成功,进入办理界面,live nodes显现只要一个

可能是运用ip衔接的NameNode,假如是这样的话,需求在hdfs-site.xml增加如下装备

<property>
    <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
    <value>false</value>
</property>

进入办理界面,live nodes显现三个,点进去只显现一个,如下图

hadoop、hive安装

node列表以主机名+端口去重,三个节点的主机名都是localhost,端口又一样,因而只显现一个,解决方法是修正主机名或端口,本文中运用第一个

修正/etc/hostname文件或运用指令hostnamectl set-hostname node1修正三个节点的主机名,之后重启服务器

mr

阐明

当时大数据技术下,许多结构封装了MapReduce,因而关于它了解即可

履行计算圆周率,进入/export/server/hadoop-3.3.0/share/hadoop/mapreduce/目录,履行hadoop -jar hadoop-mapreduce-examples-3.3.0.jar pi 2 2指令,后面两个参数可任意修正

问题记载

履行example的计算pi使命,进入办理界面,发现使命一向没有履行,或者进展长期没有改变

履行资源调度的是node1,之前设置了主机名,假如分配给node2节点履行,建议的url为node2:${port},此时node1节点并不知道它的实际地址,所以使命进展长期没有改变

在node1节点上修正/etc/hosts文件,将所有节点的ip与主机名映射

履行example的计算pi使命,报异常java.net.UnknownHostException: node3

只修正了node1映射,其他节点的映射也需求修正

hive

条件

  • 发动mysql服务并装备可长途衔接
  • 整合hadoop,在core-sile.xml文件上,之前现已装备好了,见注释整合hive 用户署理设置

装备

本文运用hive版本为3.1.2,解压hive压缩包到任意目录,以/export/server/hive-3.1.2/为例,文本中有关途径、网络地址、及MySQL装备信息等需求依据实际情况修正

  • 解决hive与hadoop之间guava版本差异
cd /export/server/hive-3.1.2/lib
rm -rf guava-19.0.jar
cp /export/server/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar .
  • 修正装备文件,进入conf目录,将hive-env.sh.template重命名为hive-env.sh,增加以下装备
vim hive-env.sh
export HADOOP_HOME=/export/server/hadoop-3.3.0
export HIVE_CONF_DIR=/export/server/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/export/server/hive-3.1.2/lib
  • conf目录下的hive-site.xml,增加如下装备
vim hive-site.xml
<configuration>
  <!-- 存储元数据mysql相关数据-->
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://192.168.26.1/hive3?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
  </property>
  <!-- H2S运转绑定host-->
  <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>node1</value>
  </property>
  <!-- 长途形式布置metastore metastore地址-->
  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://node1:9083</value>
  </property>
  <!-- 关闭元数据存储授权-->
  <property>
    <name>hive.metastore.event.db.notification.api.auth</name>
    <value>false</value>
  </property>
</configuration>
  • 将mysql驱动放到hive安装包lib下,jar包名称为mysql-connector-java-8.0.22.jar,详细进程略

  • 初始化hive 履行bin/schematool -initSchema -dbType mysql -verbos --verbose,假如呈现Initialization script completed,阐明成功。检查MySQL,发现现已有hive3数据库,且数据表也初始化了

  • 支撑中文 假如对字段、表运用中文注释,检查时会发现显现???,这是由于没有设置UTF-8字符集,因而还需求对元数据表字段做一些调整

ALTER TABLE `hive3`.`columns_v2`
MODIFY COLUMN `COMMENT` varchar(256) CHARACTER SET utf8mb4;
ALTER TABLE `hive3`.`table_params` 
MODIFY COLUMN `PARAM_VALUE` varchar(4000) CHARACTER SET utf8mb4;
ALTER TABLE `hive3`.`partition_params` 
MODIFY COLUMN `PARAM_VALUE` varchar(4000) CHARACTER SET utf8mb4;
ALTER TABLE `hive3`.`partition_keys` 
MODIFY COLUMN `PKEY_COMMENT` varchar(4000) CHARACTER SET utf8mb4;
ALTER TABLE `hive3`.`index_params` 
MODIFY COLUMN `PARAM_VALUE` varchar(4000) CHARACTER SET utf8mb4;

发动

nohup ./hive --service metastore &
nohup ./hive --service hiveserver2 &

hive默许开放两个端口。若发动成功,在浏览器输入ip:10002,可检查后台页面;10000端口使客户端以jdbc方式衔接,衔接地址为jdbc:hive2://ip:10000

衔接

  1. beeline衔接
./beeline -u jdbc:hive2://ip:10000 -n root
或者
./beeline
    !connect jdbc:hive2://ip:10000
        root
  1. 运用idea、dbeaver之类的软件衔接,好处是写SQL时有智能提示