Hadoop安装教程
1、解压Hadoop安装包:tar -zxvf hadoop-3.3.2.tar.gz
2、配置Hadoop环境变量:sudo vim /etc/profile 文末添加以下内容
export HADOOP_HOME=/export/server/hadoop-3.3.2 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin |
分发到其他节点xsync /etc/profile
各节点分别使配置生效 source /etc/profile
3、配置Hadoop默认文件(需要配置的文件均在以下目录/export/server/hadoop-3.3.2/etc/hadoop/)
(1)第一类文件hadoop-env.sh:vim /export/server/hadoop-3.3.2/etc/hadoop/hadoop-env.sh
文末添加内容
export JAVA_HOME=/export/server/jdk1.8.0_131 export HDFS_NAMENODE_USER=ljr export HDFS_DATANODE_USER=ljr export HDFS_SECONDARYNAMENODE_USER=ljr export YARN_RESOURCEMANAGER_USER=ljr export YARN_NODEMANAGER_USER=ljr |
(2)第二类文件:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml
core-site.xml:指定namenode、文件储存位置
hdfs-site.xml:可指定NameNode web 端访问地址
yarn-site.xml:指定resourcemanager
mapred-site.xml:指定运行模式yarn模式/local模式
① vim /export/server/hadoop-3.3.2/etc/hadoop/ core-site.xml
<configuration> <!-- 指定namenode --> <property> <name>fs.defaultFS</name> <value>hdfs://node1:8020</value> </property> <property> <name>fs.trash.interval</name> <value>1440</value> </property> <!-- global properties设置Hadoop本地保存数据路径 --> <property> <name>hadoop.tmp.dir</name> <value>/export/server/hadoop-3.3.2/data</value> </property> <!-- Static Web User Filter properties.设置Hadoop web UI 用户身份 --> <property> <name>hadoop.http.staticuser.user</name> <value>ljr</value> </property> <!-- 整合hive用户代理设置 --> <property> <name>hadoop.proxyuser.ljr.hosts</name> <value>*</value> <name>hadoop.proxyuser.ljr.groups</name> <value>*</value> </property> <!-- 指定zookeeper地址 --> <property> <name>ha.zookeeper.quorum</name> <value>node1:2181,node2:2181,node3:2181,node4:2181</value> </property> </configuration> |
② vim /export/server/hadoop-3.3.2/etc/hadoop/ hdfs-site.xml
<configuration> <!-- NameNode web 端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>node1:9870</value> </property> <!-- SecondaryNameNode web 端访问地址--> <property> <name>dfs.namenode.secondary.http-address</name> <value>node3:9868</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration> |
③ vim /export/server/hadoop-3.3.2/etc/hadoop/ yarn-site.xml
<!-- Site specific YARN configuration properties --> <!-- 指定 MR 走 shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定 ResourceManager 的地址--> <property> <name>yarn.resourcemanager.hostname</name> <value>node2</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> <!-- 开启日志聚集功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://node1:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间为 7 天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> <!-- 指定zk集群地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>node1:2181,node2:2181,node3:2181,node4:2181</value> </property> <configuration> |
④ vim /export/server/hadoop-3.3.2/etc/hadoop/ 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>node1:10020</value> </property> <!-- MR程序历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node1:19888</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/export/server/hadoop-3.3.2</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/export/server/hadoop-3.3.2</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/export/server/hadoop-3.3.2</value> </property> </configuration> |
(3)第三类文件workers(指定工作节点):vim /export/server/hadoop-3.3.2/etc/hadoop/workers
node1 node2 node3 node4 |
有多少个节点就输入多少个节点主机名字
分发到其他节点:xsync /$HADOOP_HOME
4.启动集群
1)初始化namenode(注意:只有第一次的时候才需要): hdfs namenode -format
如果集群是第一次启动,需要在namenode 节点格式化 NameNode(注意:多次初始化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停止 namenode 和 datanode 进程,并且要删除所有机器的hadoop安装目录下的data 和 logs 目录,然后再进行格式化。)
tips:普通用户初始化namenode 时如果报无权创建logs的错,把Hadoop安装目录的属主修改即可:sudo chown – R ljr:ljr /export (-R表示递归,export下所有的属主均被修改),当然也可以同过给普通开放全部权限来解决:sudo chmod +771
2)启动 HDFS:sbin/start-dfs.sh
(本人启动时报如下错误,原因是当时配置免密登录时是用root用户配置,解决方法在当前用户下各节点分别执行以下命令:
生成公钥私钥:ssh-keygen -t rsa
目标机器配置免密登录:ssh-copy-id node1/node2/node3/node4)
3)在配置了 ResourceManager 的节点 (node2 )启动 YARN(jps 分别查看个节点进程)
4)Web 端查看 HDFS 的 NameNode
(a)浏览器中输入:http://node1:9870(如果不能访问可以尝试输入namenode所在主机IP:端口号进行连接192.168.173.100:9870)
(b)查看 HDFS 上存储的数据信息
5、Web 端查看 YARN 的 ResourceManager
(a)浏览器中输入:http://node2:8088(如果不能访问可以尝试输入resourcemanager所在主机IP:端口号进行连接192.168.173.101:8088)
(b)查看 YARN 上运行的 Job 信息
至此,可以说Hadoop已经完成部署,下面做一些测试
6、集群基本测试
1)上传文件到集群(网页端地址:http://node1:9870)
创建文件夹hadoop fs -mkdir /input 执行完后,HDFS网页种多了个文件夹
传递一个本地文件hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
了解:经典写法:hadoop fs -put file:///$HADOOP_HOME/wcinput/word.txt hdfs://node1:8020/input
上传大文件hadoop fs -put /export/sever/Hadoop-3.3.2.tar.gz /
Web页面实际只存储了一个链接,实际存储的数据在datanode节点
2)上传文件后查看文件在本地的储存位置
进入HDFS 文件存储路径
/export/server/hadoop-3.3.2/data/dfs/data/current/BP-1436128598-192.168.10.102-1610603650062/current/finalized/subdir0/subdir0
查看 HDFS 在磁盘存储文件内容cat blk_1073741825
可以看到显示的时某个文件的一个片段(原文件被切片储存了),即HDFS存储的文件就在/export/server/hadoop-3.3.2/data/dfs/data/current/BP-817129285-192.168.10.102-1619703574964/current/finalized/subdir0/subdir0路径上(并且在其他节点的相同路径下应该还存有两份相同的片段,具体所在节点可以通过hdfs网页端查看,例点击下图的数字3可查看)
3)下载hadoop fs -get /Hadoop-3.3.2.tar.gz ./ 把文件下载到本地当前目录经典写法应为
4)启用/停止历史服务器:mapred --daemon start/stop historyserver
5)执行 wordcount 程序hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.2.jar wordcount /input/test.txt /output
其中应保证hdfs跟目录下没有指定的输出路径
6)查看wordcount 程序执行历史记录(网页端:http://node2:8088)