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
上传下载指令
注:
- 其他常见文件操作指令基本与linux相同,故不记载
- 本地途径可直接写途径,也可用前缀
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
显现三个,点进去只显现一个,如下图
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&useSSL=false&useUnicode=true&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
衔接
- beeline衔接
./beeline -u jdbc:hive2://ip:10000 -n root
或者
./beeline
!connect jdbc:hive2://ip:10000
root
- 运用idea、dbeaver之类的软件衔接,好处是写SQL时有智能提示