Hadoop使用

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》购物车)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值