从0开始的Ubuntu分布式配置(林子雨)
本文依照厦门大学林子雨老师的大数据教程进行安装和配置,完善了一些细节和解决了一些可能出现的错误。教程网址如下https://dblab.xmu.edu.cn/blog/4189/
资源下载
安装VMware
点击上方链接,并拖下至箭头位置,点击安装。安装过程中使用默认配置即可。
安装Ubuntu
将资源下载区的Ubuntu16下载好,并成功安装VMware后,即可在VMWare中安装Ubuntu16。
打开VMware,使用快捷键Ctrl+N快速创建虚拟机,这里选择典型配置
找到刚刚下载好的Ubuntu文件并选择,点击下一步
这里建议大家所有的地方都输入hadoop,分别记忆,也避免和后面的操作出现冲突
命名和位置看个人喜好,点击下一步
选择储存为单个文件,磁盘大小也可以适当提高,下一步
这里建议大家点击自定义硬件
将内存设置为8G后,点击关闭,然后点击完成。至此Ubuntu安装完成。
对Ubuntu进行配置
更换源
由于Ubuntu默认为国外源,所以在使用时经常出现网络无法使用的情况,所以我们需要对源进行更换。这里选择的是阿里云镜像(mirrors.aliyun.com)
选择完mirrors.aliyun.com后,依次点击choose server、close、reload,并等待更新完成。
更新apt
换完源后,我们需要对apt进行更新,点击打开终端
输入代码,注意,在Ubuntu中,粘贴与复制的快捷键是Ctrl+Shift+C与Ctrl+Shift+V。
sudo apt-get update
可能出现的问题一
Could not connect to archive.ubuntukylin.com:10006 (::).
解决方法:
cd /etc/apt/sources.list.d
sudo gedit /etc/apt/sources.list.d/ubuntukylin.list
注释#deb http://archive.ubuntukylin.com:10006/ubuntukylin trusty main即可
可能出现的问题二
Error in `appstreamcli': double free or corruption (fasttop): 0x0000000001bb6000
解决方法:
sudo apt install appstream/xenial-backports
sudo appstreamcli refresh –force
可能出现的问题三
解决方法
输入代码
sudo su
并重新输入即可
sudo apt-get update
可能出现的问题四
解决方法
这个问题出现的原因是有些apt还在运行,我们需要停止这些进程,输入代码查看
sudo su //获取最高权限
ps afx|grep apt //查找正在运行的进程
可以看到我的电脑中正在运行的进程
使用代码停止进程 ,注意,中间这个auto apt的进程是不用停止的,将其余的进程结束后,就可以重新更新apt了。
sudo kill -9 693
sudo kill -9 2558
可能出现的问题五
解决方法
运行代码如下
sudo apt-get remove libappstream3
sudo apt-get update
sudo apt-get install
可能出现的问题六
解决方法
sudo apt-get purge libappstream3
成功运行后显示如下
安装VMware Tools
安装完VMware Tools后,我们就可以方便的将文件拖入虚拟机。
首先,关闭Ubuntu虚拟机,并再次打开,在打开过程中右键Ubuntu
选择如图位置下的重装VMware Tools,如果不可点击,就隔一秒钟再次右键,直到可以点击后进行点击,随后登录用户。
可以看到,桌面上多了一个文件,我们点击进入
找到箭头指向的文件
右键复制
并粘贴到主文件夹中
点击解压
压缩后出现如图文件夹
我们打开终端输入代码,所有的问题都可以按enter
sudo su //进入管理者模式
cd vmware-tools-distrib //进入解压的文件夹
sudo ./vmware-install.pl //安装
安装完毕后,我们就可以自由的拖动文件进入虚拟机啦!!!
安装vim(用于文件编辑)
非常简单,运行代码即可,如中途出现选项,输入y即可
sudo apt-get install vim
由于后面很多地方需要用到,所以我简单的介绍一下使用方法,在使用vim命令进入文件时,默认是浏览模式,需要点击 i 来进入编辑模式。编辑完成后,点击esc返回浏览模式,并输入 :wq 来进行保存退出。
安装SSH
同样很简单,运行代码即可
sudo apt-get install openssh-server
安装完成后可以使用代码进行登录
ssh localhost
由于我们每次登录都需要输入密码,比较麻烦,我们依次输入代码配置成SSH无密码登陆比较方便。
exit # 如果登录了ssh,则需要先退出刚才的 ssh localhost
cd ~/.ssh/ # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa # 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys # 加入授权
安装JAVA环境
方法一:(推荐)
在资源下载栏中下载提供的jdk,如果没有安装VMware Tools,则需要根据安装VMware Tools栏中的步骤安装VMware Tools,安装完毕后,我们可以直接将jdk拖入Downloads文件夹中
依次输入以下代码
cd /usr/lib
sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件
cd ~
cd Downloads #注意区分大小写字母
sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm #把JDK文件解压到/usr/lib/jvm目录下
随后进入配置文件
cd ~
vim ~/.bashrc
按i进入编辑模式,在任意位置插入如下代码
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
按esc退出编辑模式,按 :wq 保存并退出配置文件,并执行命令让配置文件生效
source ~/.bashrc
配置完成,可用代码进行检查
java -version
方法二:(不怎么推荐)
这里推荐使用java8,在终端运行代码如下
sudo apt-get update
sudo apt-get install openjdk-8-jdk
等待下载完成后,我们需要配置环境变量。首先,我们需要找到jdk的下载位置,我下载的默认路径为 /usr/lib/jvm/java-8-openjdk-amd64,当然,为防止意外出现,我会教大家如何自己寻找。
首先,点击桌面的主文件夹,并找到computer
点击放大镜
输入jdk并找到如图名称的文件夹
检查里面是否有jre文件夹,如果有就找对了,我的路径为 /usr/lib/jvm/java-8-openjdk-amd64
找到jdk的位置后,我们需要配置环境变量,输入代码如下,打开环境变量配置文件
cd ~
vim ~/.bashrc
点击i,并在任一位置输入如下代码,注意JAVA_HOME的路径是我们刚刚找到的路径,其余的都可以复制。完成输入后,点击esc,再输入:wq即可退出
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
退出后输入代码更新环境
source ~/.bashrc
并可以通过代码检查是否配置完成
java -version
安装Hadoop
在资源下载区下载完Hadoop后,我们需要将Hadoop上传到我们的Ubuntu上面,我们将下载的Hadoop拖入到Downloads中
随后依次输入代码
sudo tar -zxvf ~/Downloads/hadoop-3.3.5.tar.gz -C /usr/local # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-3.3.5/ ./hadoop # 将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop # 修改文件权限
可以输入代码进行检查
cd /usr/local/hadoop
./bin/hadoop version
如果这里出现错误,十有八九是配置环境变量时,jdk的路径找错了,需要大家回到上面按照步骤重新配置环境变量。
运行例子
都安装完毕后,我们可以通过一个小例子来检验一下
cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input # 将配置文件作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/* # 查看运行结果
输入结果为
1 dfsadmin
要注意,运行完后如果想要再次运行,则需要先通过代码删除output
rm -r ./output
到这里,我们就已经安装完单机版的Haddop了,接下来继续进行伪分布配置。
Hadoop伪分布配置
cd /usr/local/hadoop/etc/hadoop/
这里我们分别要修改两个文件,分别是core-site.xml 和 hdfs-site.xml 。
修改core-site.xml
sudo gedit core-site.xml
在configuration中添加如下代码:
<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://localhost:9000</value>
</property>
</configuration>
效果如下
修改hdfs-site.xml
sudo gedit hdfs-site.xml
在configuration中添加如下代码:
<configuration>
<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>
效果如下
注意!!!,接下来的每一步都要按顺序来!!!
下一步,进行NameNode 的格式化(注意不要执行第二遍,因为DataNode只不会跟随第二次格式化一起重新生成。)
cd /usr/local/hadoop
./bin/hdfs namenode -format
这里等待NameNode 的格式化完成,开启 NameNode 和 DataNode 守护进程
cd /usr/local/hadoop
./sbin/start-dfs.sh
运行完成后,执行代码jps查看是否成功启动,成功启动后出现如下代码
随后打开浏览器搜索localhost:9870,出现第二张图的内容即代表成功配置伪分布式Hadoop
我们来运行一个小例子
cd /usr/local/hadoop
./bin/hdfs dfs -mkdir -p /user/hadoop //在 HDFS 中创建用户目录
./bin/hdfs dfs -mkdir input //创建input文件夹
./bin/hdfs dfs -put ./etc/hadoop/*.xml input //将 ./etc/hadoop 中的 xml 文件复制到input中
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
./bin/hdfs dfs -cat output/* //查看输出
最后的输出结果如下
注意如果生成过一次了,则需要先删除output文件夹
./bin/hdfs dfs -rm -r output
在全部重新运行上面的代码。
Hadoop分布式配置(集群安装)
网络配置
首先,你需要至少两台虚拟机,并且这两台虚拟机都要完成伪分布配置。我们选择一个虚拟机作为Master,另外的则做为Slave1、Slave2........,
在准备好两台完成伪分布配置的虚拟机后,首先我们要确保它们的hadoop是关闭的,为了方便我们可以直接关闭虚拟机。然后点击网络适配器,并将其修改为桥接模式。(两台虚拟机都需要)。
修改完毕后,打开所有的虚拟机并执行命令
sudo vim /etc/hostname
将确定为Master的虚拟机名称改为Master,其他的就是Slave1、Slave2........
保存并退出后,输入代码查看各个节点的ip地址,箭头指向的就是本机的ip地址。
ifconfig
随后在所有的虚拟机上输入代码,并修改其中的内容。
sudo vim /etc/hosts
原本的两个127.0.0.1我们只需要留下一个localhost的即可,另一个直接删除。然后在所有的虚拟机上输入节点的ip地址+节点名,注意,是各个虚拟机通过ifconfig所查询到的ip地址,不要直接抄我这里的!!!输入完成后保存并退出,并重启所有的虚拟机。
重启完后,我们可以尝试看各个节点之间能不能ping通。ping通的显示如下
SSH无密码登陆节点
在Master的终端上输入代码
cd ~/.ssh # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa* # 删除之前生成的公匙(如果有)
ssh-keygen -t rsa # 一直按回车就可以
cat ./id_rsa.pub >> ./authorized_keys
执行完毕后可以输入 ssh Master 验证一下,确认无误后输入 exit 退出ssh,接着将公钥传输到Slave1上(别的节点也是如此,只是将Slave1换成Slave2等就好了)。
scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/
并在Slave1 等节点上,将 ssh 公匙加入授权。
mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在则忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub # 用完就可以删掉了
完成后,我们就可以在Master上启动Slave节点的ssh了,可以试一下
ssh Slave1
配置PATH变量
在Master上执行
vim ~/.bashrc
并在其中添加一行
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
保存并关闭后执行即可
source ~/.bashrc
配置集群/分布式环境(注意下面的操作都是在Master上的)
输入代码进入目录
cd /usr/local/hadoop/etc/hadoop
我们需要修改几个文件
修改workers
输入代码
vim workers
将其中的localhost删除并加入Slave即可
修改 core-site.xml
输入代码
vim core-site.xml
修改其中的内容如下
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
修改hdfs-site.xml
输入代码
vim hdfs-site.xml
修改其中的内容如下(注意我只有一个Slave1,所以value设置为1,有几个就可以设置为几个)
<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>
修改mapred-site.xml
输入代码
vim 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>
</configuration>
修改yarn-site.xml
输入代码
vim yarn-site.xml
修改其中的内容如下
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
至此,所有的文件修改完成。
启动Hadoop
在 Master 节点上执行
cd /usr/local
sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件
sudo rm -r ./hadoop/logs/* # 删除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop
在 Slave节点上执行
sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop
在 Master 节点执行 NameNode 的格式化
hdfs namenode -format # 首次运行需要执行初始化,之后不需要
在Master上启动 hadoop
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
我们可以通过 jps 在Master节点和Slave节点上观察启动的进程,正确启动后如下(注意只有这一种情况正确)
执行分布式实例
在Master上输入
hdfs dfs -mkdir -p /user/hadoop
hdfs dfs -mkdir input
hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input
hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
./bin/hdfs dfs -cat output/*
如果最后的结果如下
那么恭喜大家,成功完成了从0到单机式到伪分布最后到分布式的配置!!!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)