1.安装
1.1 安装环境和整体步骤
环境
java环境
集群中的每台机器的ip
主机名
域名映射
关闭防火墙
时间同步
ssh免密
步骤
上传
解压
配置
分发
初始化
启动
1.2 安装过程
1.上传
rz 命令上传 将hadoop-3.1.1.tar.gz 上传到/opt/apps
cd /opt/apps
rz 上传
2.解压
tar -zxvf hadoop-3.1.1.tar.gz
bin 主要是一些可执行文件命令
etc 主要是一些Hadoop配置文件
sbin 超级命令 集群启动
share 共享目录 帮助文档
删除文档 rm -rf share/doc
3.配置
配置JavaHome
etc/hadoop/hadoop-env.sh
vi hadoop-env.sh
shift + G 最后一行 o 下一行插入
export JAVA_HOME=/opt/apps/jdk1.8.0_191
配置namenode
etc/hadoop/hdfs-site.xml
vi hdfs-site.xml
将复制的内容粘贴到<configuration></configuration>标签中
注意 先进入到插入模式 按i 再粘贴
<!-- 集群的namenode的位置 datanode能通过这个地址注册-->
<property>
<name>dfs.namenode.rpc-address</name>
<value>linux01:8020</value>
</property>
<!-- namenode存储元数据的位置 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hdpdata/name</value>
</property>
<!-- datanode存储数据的位置 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hdpdata/data</value>
</property>
<!-- secondary namenode机器的位置-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>linux02:50090</value>
</property>
4.分发安装包
进入到apps文件夹中
cd /opt/apps
将hadoop文件远程复制linux02 linux03
scp -r hadoop-3.1.1 linux02:$PWD
scp -r hadoop-3.1.1 linux03:$PWD
5.初始化
进入到hadoop的bin文件夹下 进行初始化 linux01
./hadoop namenode -format
初始化后 opt下会多出一个文件夹hdpdata
6.启动
单节点启动
先启动namenode
进入到hadoop的sbin目录下 linux01
./hadoop-daemon.sh start namenode 单个启动namenode
启动成功后可以访问页面
http://linux01:9870
启动datanode
进入到hadoop的sbin目录下 linux01 linux02 linux03
./hadoop-daemon.sh start datanode
启动成功后页面可以看到对应节点的信息
一键启停
为了方便今后启动我们将sbin目录配置到环境变量中
vi /etc/profile
export JAVA_HOME=/opt/apps/jdk1.8.0_191
export HADOOP_HOME=/opt/apps/hadoop-3.1.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存后
source /etc/profile
配置集群文件 hadoop的etc/hadoop/目录下workers 告知有哪些机器
vi workers
linux01
linux02
linux03
修改hadoop的sbin下的 start-dfs.sh stop-dfs.sh
vi start-dfs.sh
在第一行后插入
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
vi stop-dfs.sh
在第一行后插入
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
配置后 可以在任意目录下
stop-dfs.sh 停止
start-dfs.sh 启动
2.Java客户端
创建Maven项目,添加Hadoop依赖.
<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- 添加hadoop的依赖 -->
<!--添加hdfs的客户端依赖-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-common</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-jobclient</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
3.Yarn安装
etc/hadoop/目录下 yarn-site.xml文件
cd /opt/apps/hadoop-3.1.1/etc/hadoop/
vi yarn-site.xml
<!-- resource,manager主节点所在机器 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>linux01</value>
</property>
<!-- 为mr程序提供shuffle服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 一台NodeManager的总可用内存资源 -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<!-- 一台NodeManager的总可用(逻辑)cpu核数 -->
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>4</value>
</property>
<!-- 是否检查容器的虚拟内存使用超标情况
vmem为true 指的是默认检查虚拟内存,容器使用的虚拟内存不能超过我们设置的虚拟内存大小
-->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 容器的虚拟内存使用上限:与物理内存的比率 -->
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
将 yarn-site.xml 同步给其他Linux
scp yarn-site.xml linux02:$PWD
scp yarn-site.xml linux03:$PWD
配置一键启停
cd /opt/apps/hadoop-3.1.1/sbin
vi start-yarn.sh
vi stop-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
start-yarn.sh 一键启动
启动后可以访问 http://linux01:8088 查看页面
idea提交程序到Yarn
配置mapred-site.xml文件 添加到resources目录下
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.1.1</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.1.1</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/apps/hadoop-3.1.1</value>
</property>
</configuration>
修改提交任务的代码 maven打jar包的命令为 package
public class Test02 {
public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
System.setProperty("HADOOP_USER_NAME", "root");
Configuration conf = new Configuration();
//操作HDFS数据
conf.set("fs.defaultFS", "hdfs://linux01:8020");
//设置运行模式
conf.set("mapreduce.framework.name", "yarn");
//设置ResourceManager位置
conf.set("yarn.resourcemanager.hostname", "linux01");
// 设置MapReduce程序运行在windows上的跨平台参数
conf.set("mapreduce.app-submission.cross-platform","true");
Job job = Job.getInstance(conf, "WordCount");
//设置jar包路径
job.setJar("D:\\IdeaProjects\\hadoop\\target\\test_yarn.jar");
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReduce.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//设置路径为HDFS路径
FileInputFormat.setInputPaths(job,new Path("/wc/input/word.txt"));
FileOutputFormat.setOutputPath(job,new Path("/wc/out4"));
job.waitForCompletion(true);
}
}