hadoop安装(Centos7)
前奏
1、 然后修改主机名,方便集群间的访问
修改:hostnamectl set-hostname centos1
查看:hostname
2、 修改域名解析映射文件(添加新行)使得后续可以直接通过主机名访问
vi /etc/hosts
#内容最后添加一新行
192.168.190.130 cenos1
192.168.190.131 centos2
192.168.190.132 centos3
service network restart #重启下网卡服务
reboot #重新启动
ping centos1 #测试是否生效
3、 关闭防火墙,禁止开机启动
firewall-cmd --state #查看防火墙状态
systemctl stop firewalld.service #停止防火墙
systemctl disable firewalld.service #禁止防火墙开机启动
4、关闭selinux
vim /etc/sysconfig/selinux
修改内容SELINUX=disabled
SELINUXTYPE=targeted 注释掉
scp /etc/sysconfig/selinux centos2:/etc/sysconfig/
scp /etc/sysconfig/selinux centos3:/etc/sysconfig/
下载
http://mirrors.shu.edu.cn/apache/hadoop/common/
hadoop-2.7.7.tar.gz
后来换成了hadoop-2.6.5.tar.gz 为了安装oozie
安装
cd /usr/local
rz
tar xzvf hadoop-2.7.7.tar.gz
rm -rf hadoop-2.7.7.tar.gz
mv hadoop-2.7.7.tar.gz Hadoop
配置环境变量
vim /etc/profile #配置环境变量,进入到最下面开始配置:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
wq
配置hadoop-env.sh、yarn-env.sh、mapred-env.sh(3个系统都改)
vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
修改:export JAVA_HOME=${JAVA_HOME} 为: export JAVA_HOME=/usr/local/jdk
wq
vim /usr/local/hadoop/etc/hadoop/yarn-env.sh
export JAVA_HOME=/usr/local/jdk
vim /usr/local/hadoop/etc/hadoop/mapred-env.sh
export JAVA_HOME=/usr/local/jdk
source /etc/profile #立刻生效
测试
hadoop分布式配置完之后测试,确保hadoop启动,确保有相应的目录。
hadoop version
此时一个最基础的hadoop环境(这不是开发环境),测试一下hadoop中自带的一个测试程序(实现wordcount“hadoop界的hello word”)
cd /usr/local/hadoop
mkdir input
echo hello sm hello zhangsan hello lisi hi sm >input/info.txt
cd input
cat info.txt
cd /usr/local/hadoop
hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.7-sources.jar org.apache.hadoop.examples.WordCount input output
cd output
ll
0
hdfs上的测试:
hadoop fs -put /songtemptest/worldcount.txt /test/input
cd /usr/local/hadoop/share/hadoop/mapreduce
hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /test/input /test/output
分布式系统的hadoop的配置
ssh的免登录处理
ll ~ #如果有配置过ssh要进行删除
rm -rf ~/.ssh
ssh-keygen -t rsa #在centos1的主机上生成ssh key
一路enter 默认处理方式
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #将公钥拷贝到授权文件中
ssh root@centos1 #登录
exit #退出登录
注:同步其它机器:ssh-copy-id centos2
配置:core-site.xml Hadoop的核心信息,包括临时目录、访问地址等
配置:yarn-site.xml 配置相关的job的处理
配置:hdfs-site.xml 非常重要,可以确定文件的备份个数以及数据文件夹的路径
配置:core-site.xml(3个系统都修改)
core-site.xml 是Hadoop的核心信息,包括临时目录、访问地址等
vim /usr/local/hadoop/etc/hadoop/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/root/hadoop_tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://centos1:9000</value>
</property>
</configuration>
“/home/root/hadoop_tmp”信息,最为重要,这个文件路径配置的临时文件信息,如果不配置,那么就会在hadoop的文件夹里面生成“tmp”文件(很多人会设置在“/user/local/hadoop/tmp”),如果这样配置,一旦重新启动,所有的信息都会被清空,也就是说此时hadoop的环境就失效了。
“centos1:9000”信息,描述的是日后打开的页面管理器的路径;
hadoop 2.x版本默认端口9000,如果使用1.x版本,默认是8020。
为了保证整体的运行不出错,可以直接建立好一个“/home/root/hadoop_tmp”目录;
cd ~
mkdir hadoop_tmp
配置:yarn-site.xml(只修改master节点)
yarn-site.xml 配置相关的job的处理
vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>centos1:8033</value>
</property>
<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>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>centos1:8025</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>centos1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>centos1:8050</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>centos1:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>centos1:8090</value>
</property>
</configuration>
配置:hdfs-site.xml(3个系统都修改)
hdfs-site.xml 非常重要,可以确定文件的备份个数以及数据文件夹的路径
vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/local/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>centos1:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>centos1:50090</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
</configuration>
“dfs.replication”:文件的副本数,一般情况下,文件会备份3份;
“dfs.namenode.name.dir”:定义名称节点的路径;
“dfs.datanode.data.dir”:定义数据文件节点的路径;
“dfs.namenode.http-address”:名称服务的http路径访问;
“dfs.namenode.secondary.http-address”:第二名称节点;
“dfs.permissions”:权限认证问题,因为如果设置了,有可能以后无法进行文件访问;
dfs.namenode.datanode.registration.ip-hostname-check为false hadoop2.7.7版本要配置这个,要不上传文件是提示:“Datanode denied communication with namenode because hostname cannot be resolved (ip=192.168.190.138, hostname=192.168.190.138)” tm的读ipv6去了,实际应该是ipv4的ip。
配置:mapred-site.xml(只修改master节点)
cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/etc/hadoop/mapred-site.xml
vim /usr/local/hadoop/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
其他配置
创建文件masters、slaves
vim /usr/local/hadoop/etc/hadoop/masters #加入“centos1”
vim /usr/local/hadoop/etc/hadoop/slaves #把“localhost”改成
centos2
centos3
hadoop属于分布式的开发环境,考虑到日后要进行集群的搭建;
建议在“/usr/local/hadoop/etc/hadoop/”目录创建一个masters文件,里面写上主机的名称,内容就是centos1(之前再hosts文件里面定义的主机名称):如果是单机环境不写,也没关系
创建文件夹name、data
cd /usr/local/hadoop
mkdir dfs dfs/name dfs/data
由于此时是将所有的namenode、datanode保存路径设置在hadoop目录中,如果为了保险起见,可以自己创建;
注意:如果你的hadoop出现了问题之后并且重新配置时,请保证将这两个文件夹彻底删掉
格式化
cd /usr/local/hadoop/bin
hdfs namenode -format
格式化文件系统 “INFO util.ExitUtil: Exiting with status 0”成功
启动/验证/访问/停止
1、启动
cd /usr/local/hadoop/bin
start-all.sh #启动hadoop
2、验证
jps #查看java进程,如果有如下6个就ok
2536 DataNode
2408 NameNode
3034 NodeManager
2907 ResourceManager
3339 Jps
2748 SecondaryNameNode
注:如果是集群部署,只有4个,另外两个NodeManager、DataNode在slaves机器上
3、访问
http://192.168.190.130:50070
如果也想在外部(windows)使用centos1名称,需要修改hosts文件,增加映射配置:
C:\Windows\System32\drivers\etc\hosts 增加:192.168.190.130 centos1
http://192.168.190.130:8088/cluster
4、停止
stop-all.sh
测试免密登录
ssh centos2
hdfs文件系统访问
http://192.168.190.130:50070/explorer.html#/
如果需要主机名访问,需要在C:\Windows\System32\drivers\etc\hosts中进行主机名映射。
大坑
1、secondarynamenode不启动
hadoop换版本后一定要删掉:/home/root/hadoop_tmp这个目录,
别跟/root/hadoop_tmp这个目录弄混了
另外日志文件是这个:
/usr/local/hadoop/logs/hadoop-root-secondarynamenode-centos1.log
不是这个:/usr/local/hadoop/logs/hadoop-root-secondarynamenode-centos1.out
2、hdfs-site.xml配置
dfs.namenode.datanode.registration.ip-hostname-check为false hadoop2.7.7版本要配置这个,要不上传文件是提示:“Datanode denied communication with namenode because hostname cannot be resolved (ip=192.168.190.138, hostname=192.168.190.138)” tm的读ipv6去了,实际应该是ipv4的ip。
hadoop常用操作
hadoop fs 和 hdfs dfs 是相同的
目录操作
hadoop dfsadmin -safemode leave #退出安全模式
hadoop fs -mkdir -p /test/test1 #级联创建目录
hadoop fs -ls / #查看根目录
hadoop fs -ls #查看/user/root/
hadoop fs -rm -r -f /test #级联删除目录
文件操作
hadoop fs -put /usr/local/hadoop/output/part-r-00000 /test/ #上传本地文件到hdfs的/test目录
hadoop fs -put /usr/local/hadoop/output/part-r-00000 hdfs://centos1:9000/test #或是这样写
hadoop fs -rm /test/part-r-00000 #删除文件
hadoop fs -get /test/part-r-00000 #下载hdfs上的文件到当前目录