1.常用命令
1.namenode格式化:hdfs namenode -format
2.启动历史服务器:mapred --daemon start historyserver 或者mr-jobhistory-daemon.sh stop historyserver
3.IDEA提交集群
需要先打包,再设置打包的路径
VM: -DHADOOP_USER_NAME=hx
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://hadoop102:8020");
conf.set("mapreduce.framework.name","yarn");
conf.set("mapreduce.app-submission.cross-platform","true");
conf.set("yarn.resourcemanager.hostname","hadoop103");
4.日志
private Logger log = LoggerFactory.getLogger(KnnMapper.class);
log.info("badrecord"+值,便于调试);
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.12.0</version>
</dependency>
2.HDFS
2.1 pom
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client-api</artifactId>
<version>3.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client-runtime</artifactId>
<version>3.1.3</version>
</dependency>
2.2 hdfs客户端API
FileSystem fs = null ;
@Before
public void before() throws IOException, InterruptedException {
Configuration conf = new Configuration();
//conf.set("dfs.blocksize","25m");
fs= FileSystem.get(URI.create("hdfs://hadoop102:8020"),conf, "hx");
}
@After
public void after() throws IOException {
fs.close();
}
//上传功能
@Test
public void testPut() throws IOException {
fs.copyFromLocalFile(new Path("e:/input/test.csv"),
new Path("/digit_data/"));
}
//下载功能
@Test
public void testCopyToLocalFile() throws IOException, InterruptedException, URISyntaxException {
// 2 执行下载操作
// boolean delSrc 指是否将原文件删除
// Path src 指要下载的文件路径
// Path dst 指将文件下载到的路径
// boolean useRawLocalFileSystem 是否开启文件校验
fs.copyToLocalFile(false, new Path("/digit_data/output/part-r-00000"), new Path("e:/output.txt"), true);
}
3.配置
3.1配置hadoop3 hdfs 页面的权限
<!-- 当前用户设置成hx是我的登录用户名 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>hx</value>
</property>
<!-- 不开启权限检查 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
3.2参数优化
1 HDFS参数调优hdfs-site.xml
dfs.namenode.handler.count=20 * log2(Cluster Size),比如集群规模为8台时,此参数设置为60
2 YARN参数调优yarn-site.xml(默认)
一个nodemanager 内存大小:8G
yarn.nodemanager.resource.memory-mb
单个任务可申请的最多物理内存量,默认是8192(MB)
根据输入数据的大小128M对应1G 。例如:2G输入数据,会启动16个maptask 所以 需要16G
yarn.scheduler.maximum-allocation-mb
maptask: 1G
reducetask: 1G
4 MapReduce
4.1 shuffle及优化
定义:map方法之后,reduce方法之前,混洗过程
map阶段:调用getpartition标记数据是哪个分区的,放入环形缓冲区(默认100M,生产环境可以调整为200M),一半为数据,一半为索引,达到80%时(生产情况下可以调高),对索引进行快排,溢写成文件。(combiner、压缩)文件归并排序到磁盘。
reduce阶段:拉取对应分区的数据放入内存(默认一次拉取5个map的数据)(调整内存),溢写磁盘,归并排序,分组进入reduce方法。
优化:上面加括号的地方以及上面参数优化。
4.2 哪些地方可以压缩:
map的输入端:支持切片的压缩方式:bzip2、lzo(额外建索引,生产环境选择)
map的输出端:要求速度快:snappy、lzo
reduce的输出端:看需求 永久保存看压缩比
5.Yarn
5.1工作机制(笔试)
放入指定位置:jar(执行代码)、xml(按照自定义配置)、切片(maptask)
任务队列:多个任务
application master:读资料,负责资源的申请
5.2调度器
(1)FIFO、容量、公平调度器
Apache默认调度器:容量
CDH默认调度器:公平调度器
(2)FIFO调度器特点:
单队列,先进先出,在企业开发中没人使用
(3)容量调度器:
支持多队列,先进来的任务优先享有资源
(4)公平调度器
支持多队列,每个任务公平享有资源 并发度最高。
(5)在生产环境如何选择掉调度器
对并发度要求比较高,同时机器性能比较好,选择公平; 大公司
如果并发度不高,机器性能比较差,选择容量: 中小公司
(6)在生产环境下队列怎么创建?
容量调度器默认只有一个default队列;
按照框架名称:hive、spark、flink
按照业务名称:登录、购物车、支付模块、部门1、部门2 (居多)
好处:解耦、降低风险、可以实现任务降级(部门1》部门2》购物车)