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></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>
- 修改 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 ./
如果已防火墙关闭ssh配置无误,第一次执行此处会出现两次要求输入yes,然后会有日志产生,日志位于 /opt/hadoop/hadoop-version/logs/
使用jps 命令可以查看java相关的进程
主节点出现:NameNode、ResourceManager、SecondaryNameNode、NodeManager 子节点出现DataNode、Nodemanager,说明启动成功
如果NodeManager未启动成功,可以通过 /sbin/ start nodemanager
如果ResourceManager未启动成功,可以通过 /sbin/ start resourcemanager
如果NameNode未启动成功,可以通过 sbin/ start namenode
如果DataNode未启动成功,可以通过/sbin/ start datanode
测试hadoop、hdfs是否完好可用。
可以登陆网站测试:http://master:50070http://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"
从hdfs删除文件
- hadoop fs –rm -r directory**
- 删除用户特定目录下的directory文件夹或文件 (-r)
从hdfs查看文件
- hadoop fs -cat directory/*
- 通过"-cat 文件"命令查看HDFS下directory下文件中内容
cp、mv、du、rm、mkdir、getmerge、count等
- 这些命令hdfs都支持,用法也类似,因为比较多就不一一列举具体用法
Referrers hadoop.apache.org/docs