Single-Node Hadoop
- 准备工作
在阿里云服务器上面购买云服务器,购买配置可为2vCPU,2GB内存,40GB的硬盘。 - 修改主机名称以及添加host
1). vim /etc/hosts
# append
(云服务器的私网地址) master master
2). vim /etc/hostname
#modify
master
3) reboot
- 安装Java和设置ssh
远程连接云服务器,安装Java:
sudo apt-get update
sudo apt install openjdk-8-jdk
java –version
当最后一个命令输入完成以后,能看到版本号就代表安装成功。
4. 创建hadoop的使用用户
sudo addgroup hadoop
sudo adduser --ingroup hadoop hduser
# 为了方便操作,我们可以把hduser用户赋予sudo用户一样的权限。
vim /etc/sudoers/
# append the following lines at the file
hduser ALL=(ALL:ALL) ALL
# 如果需要使用hduser在命令行输入:
su hduser
- 设置ssh
1). 安装ssh,其实绝大部分系统都会自带。
2). 添加ssh key
sudo apt-get install openssh-server
ssh-keygen -t rsa -f id_rsa
mkdir ~/ssh
mv id_rsa* ~/ssh/
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
ssh localhost
- 安装hadoop
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz
tar xvzf hadoop-2.9.2.tar.gz
cd hadoop-2.9.2/
sudo mkdir -p /usr/local/hadoop
sudo mv * /usr/local/hadoop
sudo chown -R hduser:hadoop /usr/local/hadoop
- 配置文件(在hduser用户下操作)
1). 系统环境变量
vim ~/.bashrc
# append the following lines at the file
source ~/.bashrc
2) 配置Hadoop的环境
vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
# modify JAVA_HOME to be
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
3) 配置core-site.xml
vim /usr/local/hadoop/etc/hadoop/core-site.xml
#Add those lines in the configuration section
<property>
<name>fs.default.name</name>
<value>hdfs://master:54310</value>
</property>
# 注意:如果先前在hosts文件里面没有更改或者改错,之后的访问都有会出现错误!
4) 配置hdfs-site.xml
mkdir -p hadoop_tmp/hdfs/namenode
mkdir -p hadoop_tmp/hdfs/datanode
vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
#Add those lines in the configuration section
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hduser/hadoop_tmp/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hduser/hadoop_tmp/hdfs/datanode</value>
</property>
# 注意:hadoop_tmp文件就是结点文件,之后如果有namenode ID和datanode ID不同的报错,可以删了hadoop_tmp重新创建,再进行初始化!
5) 配置yarn-site.xml
vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
#Add those lines in the configuration section
<property>
<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>
6) 配置mapred-site.xml
vim /usr/local/hadoop/etc/hadoop/mapred-site.xml
#Add those lines in the configuration section
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 初始化namenode并且开启hadoop(在hduser用户下操作)
hdfs namenode -format
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
- 自己电脑查看hadoop相关网页
1). 配置阿里云服务器上的安全组和关闭防火墙
2). 访问网页
Configure Hadoop Cluster and Run Mapreduce Job
- 准备工作
1). 在阿里云上面购买三个云服务器,配置和单结点的相同
2). 单结点用到的机器是集群的主节点master,后面的购买的三个服务器分别是从结点slave1、slave2和slave3。
3). 修改这三个从结点的homename。
4). 修改主从结点的hosts,让每个hosts文件都包含集群里面所有结点的私网。(不同结点的私网不同,去云服务器的实例里面查看)。
5). 安装rsync,这个可以用来传配置文件sudo apt-get install rsync
。
6). 为了让上述配置生效,重启reboot
。
7). 与主节点一样给每个从节点按装java,ssh,hadoop和创建hduser - 修改master配置文件
-
core-site.xml不需要改动
-
更新hdfs-site.xml
# modify
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
- 更新yarn-site.xml
# append
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8035</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8050</value>
</property>
- 更新mapred-site.xml
# append
<property>
<name>mapreduce.job.tracker</name>
<value>master:5431</value>
</property>
<property>
<name>mapred.framework.name</name>
<value>yarn</value>
</property>
- 更新masters
vim masters
# add
master
- 更新slaves
vim slaves
# add
slave1
slave2
slave3
- 传送hadoop的配置文件到所有的slave服务器去
在slave1下输入下面指令,slave2和slave3同理:
sudo rsync -avxP /usr/local/hadoop/ hduser@slave1:/usr/local/hadoop/
- 在master节点下输入
sudo rm -rf /usr/local/hadoop_tmp/
sudo mkdir -p /usr/local/hadoop_tmp/
sudo mkdir -p /usr/local/hadoop_tmp/hdfs/namenode
sudo chown hduser:hadoop -R /usr/local/hadoop_tmp/
- 在slave节点下输入
sudo rm -rf /usr/local/hadoop_tmp/hdfs/
sudo mkdir -p /usr/local/hadoop_tmp/
sudo mkdir -p /usr/local/hadoop_tmp/hdfs/datanode
sudo chown hduser:hadoop -R /usr/local/hadoop_tmp/
# 注意:每次打算要初始化的时候,请务必先执行4,5操作再初始化。
- 在master节点下输入,同理slave2,slave3
ssh-copy-id -i $HOME/.ssh/id_rsa.pub hduser@slave1
- 初始化并且启动
hdfs namenode -format
start-dfs.sh
start-yarn.sh
Wordcount 小文件
- 下载数据集
wget 'https://github.com/hupili/agile-ir/raw/master/data/Shakespeare.tar.gz'
tar -zxvf Shakespeare.tar.gz
# 注意:如果报错说raw.githubusercontent.com不能访问,可以在hosts里面添加151.101.76.133 raw.githubusercontent.com
- 上传数据集
hadoop dfs -copyFromLocal /home/hduser/data /data
hadoop dfs -ls /data
- 执行数词操作
cp /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar ./
hadoop jar hadoop-mapreduce-examples-2.9.2.jar wordcount /data /result