hadoop 的安装与分布式模式配置
环境
宿主机:CentOS7 64位
JDK:openjdk-1.8.0
Hadoop:2.9.0
一开始使用kvm作为虚拟机,开了两个CentOS7,作为主节点和从节点。后来,后来,kvm出bug抽风了,这俩虚拟机再也起不来了。吐血。后来决定使用Docker进行部署。Docker比较好用,但也有一些bug,Docker使用过程中出现的问题单独写一篇关于Docker的。这篇主要讲Hadoop的部署步骤,比较通用。
安装步骤
创建hadoop用户
如果在创建虚拟机时没有创建hadoop用户那需要创建hadoop用户,并设置密码,密码无限制:1
2sudo useradd -m hadoop -s /bin/bash
sudo passwd hadoop
添加root权限,CentOS和Ubuntu都可以这样来设置:1
2sudo chmod 700 /etc/sudoers
sudo vim /etc/sudoers
在 root ALL=(ALL) ALL 的下一行添加一行:1
hadoop ALL=(ALL) ALL
安装SSH和设置SSH无密码登陆
通过以下命令来查看是否安装了ssh,一般CentOS自带有openssh的client和server1
rpm -qa | grep ssh
如果没有,用如下命令安装并启动1
2
3sudo yum install openssh-client openssh-server
sudo systemctl start sshd.service
sudo systemctl enable sshd.service
先执行一次ssh localhost命令验证是否登陆成功,然后退出,再生成公钥,并加入授权:1
2
3
4
5
6ssh localhost #可能会提示是否加入授权,输入yes回车
exit
cd ~/.ssh
ssh-keygen -t rsa
cat id_rsa.pub >> authorized_keys
chmod 600 ./authorized_keys
而后再用ssh localhost 验证是否不需要密码
安装openjdk并设置JAVA_HOME
1 | sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel |
安装完成后并不会自动设置JAVA_HOME,需要用如下命令进行确认:1
sudo rpm -ql java-1.7.0-openjdk-devel | grep '/bin/javac'
用vim打开/etc/profile,在最后一行添加如下代码:1
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
等号前后不能留空格。
再将配置文件重载一下,这样就不需要重启:1
source /etc/profile
通过如下命令检查是否设置成功:1
2
3echo $JAVA_HOME
java -version
$JAVA_HOME/bin/java -version
安装Hadoop 2.9.0
Hadoop 2 可以通过 http://mirror.bit.edu.cn/apache/hadoop/common/ 或者 http://mirrors.cnnic.cn/apache/hadoop/common/ 下载。选择binary下载即可,src是源码包,需要进行编译。1
2cd ~
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.9.0/hadoop-2.9.0.tar.gz
下载完成后可用md5sum比较文件md5值。而后将hadoop安装到/usr/local文件夹中1
2
3
4sudo tar -zxf ~/下载/hadoop-2.6.0.tar.gz -C /usr/local
cd /usr/local/
sudo mv ./hadoop-2.6.0/ ./hadoop
sudo chown -R hadoop:hadoop ./hadoop
检查hadoop是否可用1
2cd /usr/local/hadoop
./bin/hadoop version
需要注意的是这里有个地方需要手动修改个值,./etc/hadoop/hadoop-env.sh里需要把${JAVA_HOME}改成/usr/lib/jvm/java-1.8.0-openjdk ,这个也算一个bug吧#-_-
现在已经可以运行单机版的hadoop了1
2
3
4
5cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input # 将配置文件作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.0.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/*
可能会有 “WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable” 这样的错误提示,但是亲测这个警告问题不大,不影响结果。据说可以通过编译源码来解决……还没试过。