hadoop下载地址:http://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz
hadoop集群的安装配置大致分为以下六个步骤:
选定一台机器作为master
在master节点上创建hadoop用户、安装ssh服务端、配置jdk环境
在master节点上安装hadoop,完成配置
在其他Slave节点上创建hadoop用户安装ssh服务端、配置jdk环境
将master节点上的/usr/local/hadoop目录复制到其他Slave节点上
在master节点上开启hadoop
- sudo useradd -m hadoop -s /bin/bash
- #设置密码
- sudo passwd hadoop
- #增加管理员权限
- sudo adduser hadoop sudo
-
2.2ssh无密码登陆节点
- cd ~/.ssh
- #生成公钥和私钥
- ssh-keygen -t rsa
- #放到authorized_key中
- cat ./id_rsa.pub>>./authorized_keys
- #更改本地hosts
- vim /etc/hosts
- #将公钥传到slavel机器
- scp ~/.ssh/id_rsa.pub hadoop@Slavel:/home/hadoop
- #将传过来的公钥继续追加写入到authorized_keys
- cat ~/id_rsa.pub>>~/.ssh/authorized_keys
2.3配置jdk
- vim ~/.bashrc
- #修改之后保存,刷新
- source ~/.bashrc
在末尾添加环境变量
- export JAVA_HOME=/tools/JDK/jdk1.8.0_371
- export JRE_HOME=${JAVA_HOME}/jre
- export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
- export PATH=${JAVA_HOME}/bin:$PATH
- #下载完之后解压hadoop移动到/usr/local目录中
- mv ./hadoop /usr/local
- #给当前hadoop用户添加一个用户组,以至于有权限访问hadoop文件
- chown +R hadoop /usr/local/hadoop
在配置集群需要修改/usr/local/hadoop/etc/hadoop目录下的workers、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml五个文件(这里仅设置正常启动所必需的设置项)
3.1修改workers文件
本机是master,在master中添加一行
Slaver
3.2修改core-site.xml文件
- <configuration>
- <property>
- <name>hadoop.tmp.dir</name>
- <value>file:/usr/local/hadoop/tmp</value>
- <description>Abase for other temporary directories.</description>
- </property>
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://Master:9000</value>
- </property>
- </configuration>
3.3修改hdfs-site.xml文件
- <configuration>
- <property>
- <name>dfs.namenode.secondary.http-address</name>
- <value>Master:50090</value>
- </property>
- <property>
- <name>dfs.replication</name>
- <value>1</value>
- </property>
- <property>
- <name>dfs.namenode.name.dir</name>
- <value>file:/usr/local/hadoop/tmp/dfs/name</value>
- </property>
- <property>
- <name>dfs.datanode.data.dir</name>
- <value>file:/usr/local/hadoop/tmp/dfs/data</value>
- </property>
- </configuration>
3.4修改mapred-site.xml文件
- <configuration>
-
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
- <property>
- <name>mapreduce.jobhistory.address</name>
- <value>Master:10020</value>
- </property>
- <property>
- <name>mapreduce.jobhistory.webapp.address</name>
- <value>Master:19888</value>
- </property>
- <property>
- <name>yarn.app.mapreduce.am.env</name>
- <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
- </property>
- <property>
- <name>mapreduce.map.env</name>
- <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
- </property>
- <property>
- <name>mapreduce.reduce.env</name>
- <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
- </property>
- </configuration>
3.5修改yarn-site.xml文件
- <property>
- <name>yarn.resourcemanager.hostname</name>
- <value>Master</value>
- </property>
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
将以上文件都修改完之后需要把master节点上的hadoop文件复制到各个节点上去
首先在master上执行如下命令:
- cd /usr/local
- sudo rm -r ./hadoop/tmp ./hadoop/logs/*
- tar -zcf ~/hadoop.master.tar.gz ./hadoop
- cd ~
- scp ./hadoop.master.tar.gz Slavel:/home/hadoop
然后在slavel节点上执行如下命令:
- sudo rm -r /usr/local/hadoop
- sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
- sudo chown -R hadoop /usr/local/hadoop
slavel执行完成之后回到master上来
第一次启动hadoop集群时,须先在master节点上执行名称节点的格式化
hdfs namenode -format
启动hadoop,须在master上进行(这里我配置了hadoop的环境变量的)
- start-dfs.sh
- start-yarn.sh
- mr-jobhistory-daemon.sh start historyserver
hadoop配置环境变量
vim ~/.bashrc
export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin
jps命令可查看各个节点启动的进程,如正确启动,则在master节点杀死嗯有NameNode、ResourceManager、SecondaryNameNode和JobHistoryServer进程
缺少任意一进程都表示出错
执行分布式实例
- hdfs dfs -mkdir -p /user/hadoop
- #其次在hdfs中创建一个input目录,并把/usr/local/hadoop/etc/hadoop目录中的配置文件作为输入文件复制到input目录中
- hdfs dfs -mkdir input
- hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input
运行MapReduce作业
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar grep input output 'dfs[a-z.]+'
查看结果
./bin/hdfs dfs -cat output/*


可能遇到的问题:
在master拷贝的hadoop到节点机器上因为hadoop里面配置的jdk的路径是master机器上的,所以要在/usr/local/hadoop/etc/hadoop/hadoop-env.sh
将jdk路径改成自己的