Hadoop完全分布式搭建
Hadoop原理介绍
查看我的另一篇文章:https://blog.csdn.net/weixin_42529806/article/details/84026873
搭建背景说明
- 用于学习大数据使用
- 只需要一台电脑上(内存至少8G的PC)就可以搭建hadoop的完全分布式(VMware虚拟机*3)
- 为什么使用原生hadoop搭建呢
- 说明1:企业中一般用第三方厂家的hadoop版本(比如:Cloudera的CDH、Hortonworks的HDP等),用起来特别方便
- 说明2:自己学习,可以用原生hadoop,自己看着文档,手把手的搭建,熟悉各种配置等,有助于对hadoop的深入了解
- 需要准备3台虚拟机(用VMware软件创建),Xshell软件,文件传输的神器WinSCP,hadoop、jdk的linux安装包等等(文章下面全都有给地址,直接可以下这些干货)
VMware虚拟机的安装使用
- VMware软件地址:https://pan.baidu.com/s/1cYV_QQnecw88ldxS7nNWLQ (有用记得点赞哦)
- VMware软件使用方法以及虚拟机安装Ubuntu系统: https://www.cnblogs.com/la-fe/p/7835252.html
- 使用Xshell来操作虚拟机:https://ken.io/note/xshell-setup-ssh
(xshell可以一条命令同时操作多个shell,后面搭建集群过程非常有效) - windows主机和linux虚拟机进行文件传输的神器WinSCP(后面会用到):https://pan.baidu.com/s/1epwMmchcB4hn7GTlw94pIw
- 使用VMware软件配置3台机子,linux系统使用Udbuntu16.04.5
虚拟机准备
- 3台虚拟机
主机名 | ip |
---|---|
master | 192.168.50.129 |
slave1 | 192.168.50.130 |
slave2 | 192.168.50.131 |
- 配置所有机器的hostname和hosts
1. vim /etc/hostname
#(三台主机名分别改master slave1 slave3)
2. vim /etc/hosts
192.168.50.129 master
192.168.50.130 slave1
192.168.50.131 slave2
#注意:把原来的127.0.0.1 localhost删除了,不然后面可能会出问题
3. 重启生效
- 配置ssh免密登陆
1. sudo apt-get install openssh-server #安装ssh
2. ssh-keygen -t rsa -P '' 然后按回车
#说明:以rsa算法,生成公钥和私钥,-P '',表示是空密码;该命令执行完后,会在个人主目录下生产.ssh目录,里面会有两个文件,id_rsa(私钥)和id_rsa.pub(公钥);该目录为隐藏目录,可用以下命令查看:ls -lah
3. cd .ssh/
4. ls
5. cat id_rsa.pub >> authorized_keys #进入.ssh目录下把公钥追加到 authorized_keys文件中
ssh root@192.168.50.130 cat ~/.ssh/id_rsa.pub>> authorized_keys
ssh root@192.168.50.131 cat ~/.ssh/id_rsa.pub>> authorized_keys
#把slave1、slave2公钥合并到authorized_keys 中
6. scp authorized_keys 192.168.50.130:/root/.ssh/
scp authorized_keys 192.168.50.131:/root/.ssh/
#authorized_keys远程copy到slave1和slave2之中
7. chmod 600 authorized_keys #修改文件权限(读写权限)
8.service sshd restart #重启操作, 重新启动ssh服务
9. 本机测试,ssh localhost,如果不需要密码可以登录,说明连接成功。
10. 测试能否ssh免密登录
组件准备
- hadoop生态圈组件
- hadoop2.7.3+Hbase-1.2.4+hive-2.1.1+sqoop-1.99.7+zookeeper-3.4.9+kafka_2.12-0.10.2.1
- 下载地址:https://pan.baidu.com/s/12oGHTBupNTYDuecVGwldCg (有用记得点赞哦)
- 安装包上传到linux虚拟机(使用WinSCP,上面提到的)
- 安装包上传到/home下的software
1. mkdir /home/software
2. 上传则使用WinSCP软件哈
开始搭建hadoop分布式集群
安装jdk和hadoop
- 解压
cd /home/software
mkdir /opt/java_env
mkdir /opt/hadoop
tar -zxvf jdk1.8.....
tar -zxvf hadoop2.7.3
mv jdk1.8..... /opt/java_env/jdk1.8
mv hadoop2.7.3 /opt/hadoop/hadoop2.7.3
- 配置jdk和hadoop环境变量
1. 编辑 vim /etc/profile 之后按i键
2. 在最后面加上,上面的别动哈
export JAVA_HOME=/opt/java_env/jdk1.8
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=/opt/hadoop/hadoop-2.7.3
export PATH=$PATH:$HADOOP_HOME/sbin
export PATH=$PATH:$HADOOP_HOME/bin
3. 按ESC
4. :wq---保存退出
5. source /etc/profile 使环境变量生效
6. java -version,查看jdk环境变量是否配置成功
(如果显示错误,则可能是jdk的版本和linux系统版本不对应 64位(32位)jdk---64位(32位)linux)
7. 配置hadoop-env.sh、yarn-env.sh,在Hadoop安装目录下
vim etc/hadoop/hadoop-env.sh
vim etc/hadoop/yarn-env.sh
进去加入export JAVA_HOME=/opt/java_env/jdk1.8(jdk安装路径)
- 配置基本的xml(配置文件在hadoop2.7.3下的/etc/hadoop/目录下的)
- core-site.xml
vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name> <!--NameNode 的URI-->
<value>hdfs://mater:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name> <!--hadoop临时文件的存放目录-->
<value>/opt/hadoop/hadoop-2.7.3/temp</value>
</property>
</configuration>
- hdfs-site.xml
vim hdfs-site.xml
<configuration>
<property> <!--namenode持久存储名字空间及事务日志的本地文件系统路径-->
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/hadoop-2.7.3/dfs/name</value>
<!--目录无需预先创建,会自动创建-->
</property>
<property> <!--DataNode存放块数据的本地文件系统路径-->
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop/hadoop-2.7.3/dfs/data</value>
</property>
<property> <!--数据需要备份的数量,不能大于集群的机器数量,默认为3-->
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property> <!--设置为true,可以在浏览器中IP+port查看-->
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
- mapred-site.xml
先 cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<configuration>
<property> <!--mapreduce运用了yarn框架,设置name为yarn-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property> <!--历史服务器,查看Mapreduce作业记录-->
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
- yarn-site.xml
vim yarn-site.xml
<configuration>
<property> <!--NodeManager上运行的附属服务,用于运行mapreduce-->
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property> <!--ResourceManager 对客户端暴露的地址-->
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property> <!--ResourceManager 对ApplicationMaster暴露的地址-->
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property> <!--ResourceManager 对NodeManager暴露的地址-->
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property> <!--ResourceManager 对管理员暴露的地址-->
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property> <!--ResourceManager 对外web暴露的地址,可在浏览器查看-->
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
- 配置slaves文件
vim slaves
1. 去除默认的localhost,
2. 加入
slave1
slave2
3. :wq保存退出
- 通过远程复制命令scp,将配置好的Hadoop复制到各个节点对应位置
scp -r /opt/hadoop/hadoop-2.7.3 192.168.50.130:/opt/hadoop-2.7.3
scp -r /opt/hadoop/hadoop-2.7.3 192.168.50.131:/opt/hadoop-2.7.3
- Hadoop的启动与停止
- 在Master服务器启动hadoop,从节点会自动启动,进入Hadoop目录下,
cd /opt/hadoop/hadoop2.7.3
bin/hdfs namenode -format #进行hdfs格式化
sbin/start-all.sh #进行启动
sbin/start-dfs.sh、sbin/start-yarn.sh #也可以分开启动
master上输入jps:看到ResourceManager、NameNode、SecondaryNameNode进程
slave 上输入命令:jps, 看到DataNode、NodeManager进程
- windows配置
接下来配置本地hosts,编辑
C:\Windows\System32\drivers\etc的hosts文件,加入
192.168.172.71 master
192.168.172.72 slave1
192.168.172.73 slave2
在浏览器中输入http://master:50070查看master状态
- 停止hadoop,进入Hadoop目录下,输入命令:sbin/stop-all.sh,即可停止master和slave的Hadoop进程
常见问题
- hadoop上传文件报错(比如说:RemoteException)
查错步骤
-
jps查看进程都启了没
-
hadoop dfsadmin -report 查看磁盘使用情况 都是空的就是错的
-
另外,原因可能是使用hadoop namenode -format格式化时格式化了多次造成那么spaceID不一致
解决办法
-
stop-all.sh #停止集群
-
rm -rf /hadoop/… #删除在hdfs中配置的data目录(即在core-site.xml中配置的hadoop.tmp.dir以及hdfs-site.xml中对应的文件,包括logs)下面的所有数据
-
hadoop namenode -format #重新格式化
-
start-all.sh #重启集群
-
再次hadoop dfsamin -report查看磁盘使用情况,如下图就正常了