Hadoop 集群安装配置
步骤预览及基础工作
- 安装 jdk
- 确定集群节点个数,配置安装多个虚拟机,并设置ssh免密登陆 使用hostname修改机器名称
- 主节点:master
- 从节点:slaver1、slaver2、slaver3
192.168.100.100 master
192.168.100.1 slaver1
192.168.100.2 slaver2
192.168.100.3 slaver3 - 配置SSH免密登录及测试
- 安装hadoop
- 初始化、启动hadoop以及测试
- hadoop执行jar包
- 常用HDFS命令
配置ssh
前提新建多个虚拟机,修改hostname
在此处声明一下,使用root用户安装或者新建用户(如 hadoop)安装都可以,只是配置ssh要对安装用户配置ssh,
同时通过chown –R user:user /directory 将权限控制好即可在此处声明一下,
使用root用户安装或者新建用户(如 hadoop)安装都可以,
只是配置ssh要对安装用户配置ssh,
同时通过chown –R user:user /directory 将权限控制好即可
下面给出三种修改hostname 的方法:
- 一:hostname master,与修改/etc/hostname文件和/etc/hosts文件一样的效果
- 二:如果只想修改特定的主机名(静态,瞬态或灵活) hostnamectl --static set-hostname master
重启后可以使用: hostnamectl –static 、hostname 查看修改结果 - 三:修改/etc/sysconfig/network配置文件(此文件依然存在,只是是空的),此文件修改后依然会起作用。
ssh免密登录配置
- 主节点:ssh-keygen -t rsa -P ‘’
进入到用户的家目录下: cd ~/.ssh
会看到两个文件: id_rsa和id_rsa.pub - 然后每个子节点上执行:ssh-keygen -t rsa -P ‘’
- 在主节点上 touch ~/.ssh/authorized_keys新建文件
- 将主节点、所有子节点,上 ~/.ssh/id_rsa.pub 中内容都复制到authorized_keys文件中,
之后将该文件同步到所有节点中,内容完全一样,并且权限要设置为下图所示:
配置完成后使用ssh hostname,免密登录就会成功,主节点、子节点之间需互相测试,即ssh配置成功。
安装hadoop
前提:安装完成 jdk
下载hadoop,事例hadoop安装路径为:installation path /opt/hadoop/
基础设置
hadoop 下载地址
hadoop download
解压,安装
cd /opt/hadoop
tar –zxvf hadoop-version.tar.gz
创建hadoop hdfs 实例路径:(以下为六条sgell命令,创建六个路径,使用Path * 来标注,方便理解)
Path1 hadoop hdfs 实例目录
Path2 core-site.xml 文件中hadoop.tmp.dir属性目录,A base for other temporary directories.
Path3 mapred-site.xml文件中 mapred.local.dir属性目录.
Path4 hdfs-site.xml 为hadoop实例目录,可以在该文件中其他属性设置主节点存储目录以及子节点数据目录(Path5、Path6).
Path5 core-site.xml 文件中dfs.name.dir属性目录,主节点的hadoop实例化目录.
Path6 hdfs-site.xml 文件中dfs.data.dir属性目录,子节点的hadoop实例化数据目录,存储hdfs的数据块.
- mkdir /root/hadoop
Path1 - mkdir /root/hadoop/tmp
Path2 - mkdir /root/hadoop/var
Path3 - mkdir /root/hadoop/dfs
Path4 - mkdir /root/hadoop/dfs/name
Path5 - mkdir /root/hadoop/dfs/data
Path6
下面进行配置文件的修改:
配置文件目录为(以以上安装目录为例):
installation path /opt/hadoop/
profile path /opt/hadoop/hadoop-version/etc/hadoop/
- 修改core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.security.key.provider.path</name>
<value>kms://http@master:16000/kms</value>
<description>
The KeyProvider to use when interacting with encryption keys used
when reading and writing to an encryption zone.
</description>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>fs.inmemory.size.mb</name>
<value>200</value>
</property>
</configuration>
- 修改hdfs-site.xml
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/root/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/root/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.encryption.key.provider.uri</name>
<value>kms://http@master:16000/kms</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.block.size</name>
<value>536870912</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>20</value>
</property>
</configuration>
- 修改mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/root/hadoop/var</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 修改year-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>
- 修改hadoop-env.sh
export JAVA_HOME=${JAVA_HOME}
配置jdk 安装路径
export JAVA_HOME= /path of jdk - 修改slaves
只需要将子节点的hostname写入文件中即可,按照本文实例为(主节点为master,子节点为slaver*)
slaver1
slaver2
slaver3 - kms 加密配置,列举了主要配置项,不需要的可以直接忽略,不用修改
<configuration>
<!-- KMS Backend KeyProvider -->
<property>
<name>hadoop.kms.key.provider.uri</name>
<value>jceks://file@/${user.home}/kms.keystore</value>
<description>
URI of the backing KeyProvider for the KMS.
</description>
</property>
<property>
<name>hadoop.security.keystore.java-keystore-provider.password-file</name>
<value>kms.keystore.password</value>
<description>
If using the JavaKeyStoreProvider, the file name for the keystore password.
</description>
</property>
<property>
<name>dfs.encryption.key.provider.uri</name>
<value>kms://http@master:16000/kms</value>
</property>
<property>
<name>hadoop.kms.authentication.kerberos.keytab</name>
<value>${user.home}/kms.keytab</value>
<description>
Path to the keytab with credentials for the configured Kerberos principal.
</description>
</property>
</configuration>
初始化、启动hadoop
-
主节点上进行如下操作,初始化hadoop
cd /opt/hadoop/hadoop-version/bin
./hadoop namenode –format -
执行结束后会显示一些参数配置以及shutting down Namenode at master/ip 同时 /root/hadoop/dfs/name 下会产生current目录
-
然后启动hadoop
cd /opt/hadoop/hadoop-version/sbin
./start-all.sh -
如果已防火墙关闭ssh配置无误,第一次执行此处会出现两次要求输入yes,然后会有日志产生,日志位于 /opt/hadoop/hadoop-version/logs/
-
使用jps 命令可以查看java相关的进程
主节点出现:NameNode、ResourceManager、SecondaryNameNode、NodeManager
子节点出现DataNode、Nodemanager,说明启动成功
如果NodeManager未启动成功,可以通过 /sbin/yarn-daemon.sh start nodemanager
如果ResourceManager未启动成功,可以通过 /sbin/yarn-daemon.sh start resourcemanager
如果NameNode未启动成功,可以通过 sbin/yarn-daemon.sh start namenode
如果DataNode未启动成功,可以通过/sbin/yarn-daemon.sh start datanode
测试hadoop、hdfs是否完好可用。
可以登陆网站测试:
http://master:50070
http://master:8088/cluster
hadoop执行jar包
生成jar包的方式不过多的介绍
建议将hadoop 命令配置成全局可用,进入命令所在目录下执行也可${HADOOP_HOME}/bin/hadoop
hadoop jar ~/path/example.jar com/hadoop/hadoopexample/example /input/examplein /output/exampleout
hadoop jar arg0 arg1 arg2 arg3 ...命令参数 (arg0 加载jar文件)
arg1: com/hadoop/hadoopexample/example 为jar包内的目录结构
arg2: /input/examplein 输入目录
arg3: /output/exampleout 输出目录
常用HDFS命令
查看HDFS状态,该命令查看节点的状态等情况
hadoop dfsadmin -report
命令基本格式 hadoop fs -cmd < args >
-
与shell ls 用法一样,列举文件目录下的所有文件
hadoop fs -ls 路径
-
-R 递归文件目录
hadoop fs -ls -R 路径
-
上传文件到hdfs
-hadoop fs -put ~/path/file filename
- 通过"hadoop fs -put file filename"命令将"master.Hadoop"机器下的"~/path/"目录下的file文件上传到HDFS上并重命名为filename
- 注:在上传文件时,文件首先复制到DataNode上,只有所有的DataNode都成功接收完数据,文件上传才是成功的。
-
从hdfs下载文件
- hadoop fs -get file1 file2
-通过"hadoop fs -get file1 file2"命令将HDFS中的"file1"文件复制到本地系统并命名为"file2"
- hadoop fs -get file1 file2
-
从hdfs删除文件
- hadoop fs –rm -r directory**
- 删除用户特定目录下的directory文件夹或文件 (-r)
-
从hdfs查看文件
- hadoop fs -cat directory/*
- 通过"-cat 文件"命令查看HDFS下directory下文件中内容
-
cp、mv、du、rm、mkdir、getmerge、count等
- 这些命令hdfs都支持,用法也类似,因为比较多就不一一列举具体用法