Hadoop复习(三) --- Intellij Idea 配置,hadoop 常用指令,节点的服役和退役,运行本地MR作业流程,打jar包,切片计算方式

一、Intellij Idea
--------------------------------------------
    1.下载idea: https://www.jetbrains.com/idea/download/download-thanks.html

    2.安装idea

    3.获取在线注册码:http://idea.lanyus.com/
        或者直接拷贝代码
        K71U8DBPNE-eyJsaWNlbnNlSWQiOiJLNzFVOERCUE5FIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJSUzAiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJXUyIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiUkMiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJEQyIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IkRCIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiUk0iLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJETSIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IkFDIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiRFBOIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiR08iLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJQUyIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IkNMIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJSU1UiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifV0sImhhc2giOiI4OTA4Mjg5LzAiLCJncmFjZVBlcmlvZERheXMiOjAsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-Owt3/+LdCpedvF0eQ8635yYt0+ZLtCfIHOKzSrx5hBtbKGYRPFDrdgQAK6lJjexl2emLBcUq729K1+ukY9Js0nx1NH09l9Rw4c7k9wUksLl6RWx7Hcdcma1AHolfSp79NynSMZzQQLFohNyjD+dXfXM5GYd2OTHya0zYjTNMmAJuuRsapJMP9F1z7UTpMpLMxS/JaCWdyX6qIs+funJdPF7bjzYAQBvtbz+6SANBgN36gG1B2xHhccTn6WE8vagwwSNuM70egpahcTktoHxI7uS1JGN9gKAr6nbp+8DbFz3a2wd+XoF3nSJb/d2f/6zJR8yJF8AOyb30kwg3zf5cWw==-MIIEPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE1MTEwMjA4MjE0OFoXDTE4MTEwMTA4MjE0OFowETEPMA0GA1UEAwwGcHJvZDN5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQC9WZuYgQedSuOc5TOUSrRigMw4/+wuC5EtZBfvdl4HT/8vzMW/oUlIP4YCvA0XKyBaCJ2iX+ZCDKoPfiYXiaSiH+HxAPV6J79vvouxKrWg2XV6ShFtPLP+0gPdGq3x9R3+kJbmAm8w+FOdlWqAfJrLvpzMGNeDU14YGXiZ9bVzmIQbwrBA+c/F4tlK/DV07dsNExihqFoibnqDiVNTGombaU2dDup2gwKdL81ua8EIcGNExHe82kjF4zwfadHk3bQVvbfdAwxcDy4xBjs3L4raPLU3yenSzr/OEur1+jfOxnQSmEcMXKXgrAQ9U55gwjcOFKrgOxEdek/Sk1VfOjvS+nuM4eyEruFMfaZHzoQiuw4IqgGc45ohFH0UUyjYcuFxxDSU9lMCv8qdHKm+wnPRb0l9l5vXsCBDuhAGYD6ss+Ga+aDY6f/qXZuUCEUOH3QUNbbCUlviSz6+GiRnt1kA9N2Qachl+2yBfaqUqr8h7Z2gsx5LcIf5kYNsqJ0GavXTVyWh7PYiKX4bs354ZQLUwwa/cG++2+wNWP+HtBhVxMRNTdVhSm38AknZlD+PTAsWGu9GyLmhti2EnVwGybSD2Dxmhxk3IPCkhKAK+pl0eWYGZWG3tJ9mZ7SowcXLWDFAk0lRJnKGFMTggrWjV8GYpw5bq23VmIqqDLgkNzuoog==

    4.配置和使用idea
        a.修改自动补全代码
            editor --> KeyMap --> 选择 Eclipse copy --> Mian menu --> code --> completion --> basic --> 修改为 alt + /
        b.修改快捷输入
            syso --> System.out.println("");
            main --> public static main ...
            editor --> live templates --> + --> group --> java --> + --> live templates --> ...

    5.新建项目 -- 新建模块
        File --> new --> project --> new --> module

    6.配置Maven
        file --> setting --> maven --> user setting file --> local repository

    7.设置文件的编码为utf-8
        file --> setting --> File Encodings --> global : utf-8 -->Project : utf - 8
        --> Default encoding for properties files : utf-8  后面Transparent打钩 --> ok

    8.自己的资源请放入main/java/resources 下,以便于加载。比如core-site.xml文件等

    ~.常用快捷键,持续更新...
        Alt + Enter -->             //错误提示,自动解析错误.光标位于行尾时可自动补全变量名及其引用
        Ctrl + Alt + Enter -->      //自动完成一行代码(包括自动填写行尾的分号)
        shift + shift -->           //强大的搜索功能,只要是项目中有的,啥都能搜
        ctrl + shift + r -->        //搜索类
        ctrl + e -->                //最近文件
        ctrl + o -->                //打开等级树


二、hadoop 常用指令
----------------------------------------------------
    1.获取配置文件选项
        $> hdfs getConf -confkey ...

    2.配置最小块大小[hdfs-site.xml]
        dfs.namenode.fs-limits.min-block-size = 512 * n;
        注意:此选项值,必须是512的倍数。因为校验和是每512字节一校验。
        注意:此选项值,需要去修改集群的配置文件。修改客户端配置文件无意义

扫描二维码关注公众号,回复: 3071198 查看本文章

    3.配置辅助名称节点[hdfs-site.xml]
         dfs.namenode.secondary.http-address = 50090
        注意:此选项值,需要去修改集群的配置文件。修改客户端配置文件无意义

    4.查看镜像文件和编辑日志
        $> hdfs oiv -i  fs_path/../fsimage  -o  out_path -p  XML    //使用xml解析镜像文件
        $> hdfs oev -i  edit_path/../edit  -o  out_path -p  XML    //使用xml解析日志文件

    5.dfsadmin 管理命令
        a.手动滚动日志文件
            $> hdfs dfsadmin -rollEdits

        b.启动hdfs时,镜像文件和日志文件会自动融合,并滚动镜像文件

        c.安全模式
            $> hdfs dfsadmin -safemode  enter       //进入
            $> hdfs dfsadmin -safemode  get         //查看
            $> hdfs dfsadmin -safemode  leave       //离开
            $> hdfs dfsadmin -safemode  wait        //等待
            注意:安全模式下,不能修改文件(增删改查)

        d.保存名称空间(目录树),需要安全模式
            $> hdfs dfsadmin -saveNamespace

        e.namenode上刷新节点
            $> hdfs dfsadmin -refreshNodes

    6.配置名称节点和数据节点目录
        a.配置名称节点文件存放目录
             <property>
                 <name>dfs.namenode.name.dir</name>
                 <value>file:///home/ubuntu/hadoop/dfs/name1,file:///home/ubuntu/hadoop/dfs/name2</value>
             </property>
            注意:name1和name2是副本的关系,也就是说,两个文件夹中的文件时一模一样的。是目录的2个副本

        b.配置数据节点文件存放目录
             <property>
                 <name>dfs.datanode.data.dir</name>
                 <value>file:///home/ubuntu/hadoop/dfs/data1,file:///home/ubuntu/hadoop/dfs/data2</value>
             </property>
            注意:data1 和 data2没有关系,谁也不是谁的副本。只不过data1存满了,会接着往data2中存储

三、节点的服役和退役(hdfs)
---------------------------------------------------------------
    1.添加新节点(服役)
        a.查看配置文件[hdfs-site.xml] 的属性
             <property>
             <name>dfs.hosts</name>
             <value>/soft/hadoop/etc/dfs-hosts-include.conf</value>
             </property>

             <property>
             <name>dfs.hosts.exclude</name>
             <value>/soft/hadoop/etc/dfs-hosts-exclude.conf</value>
             </property>

        b.在/soft/hadoop/etc/dfs-hosts-include.conf配置文件中,添加新节点的节点名称
            注意:该文件在namenode的本地目录下

        c.在namenode上刷新节点
            $> hdfs dfsadmin -refreshNodes

        d.在slaves文件中,添加新节点的主机名或者ip

        e.单独启动新的节点中的datanode[在新节点中操作]
            $> hadoop-daemon.sh start datanode

    2.退役一个节点
         a.查看配置文件[hdfs-site.xml] 的属性
             <property>
             <name>dfs.hosts</name>
             <value>/soft/hadoop/etc/dfs-hosts-include.conf</value>
             </property>

             <property>
             <name>dfs.hosts.exclude</name>
             <value>/soft/hadoop/etc/dfs-hosts-exclude.conf</value>
             </property>

         b.在/soft/hadoop/etc/dfs-hosts-exclude.conf配置文件中,添加要退役的节点的节点名称
         注意:该文件在namenode的本地目录下,没有就创建一个
         注意:此时先不要动白名单(dfs-hosts-include.conf)

         c.在namenode上刷新节点
         $> hdfs dfsadmin -refreshNodes

         d.去WebUI上查看节点的状态是否为退役(Decommission In Progress),
            刷新,等待,直到所有要退役的节点的状态已经变成 Decommissioned 了.
            这时说明,退役节点的数据已经在其他服役的节点上重新完成了备份。
            数据转移工作已经完成

         e.从白名单[dfs-hosts-include.conf]中删除已经退役的节点,并且刷新节点

         f.在slaves文件中,删除退役节点的主机名或者ip


四、节点的服役和退役(yarn)
--------------------------------------------------
    1.请参照三。
    2.配置文件变成[yarn-site.xml]
         <property>
         <description>Path to file with nodes to include.</description>
         <name>yarn.resourcemanager.nodes.include-path</name>
         <value></value>
         </property>

         <property>
         <description>Path to file with nodes to exclude.</description>
         <name>yarn.resourcemanager.nodes.exclude-path</name>
         <value></value>
         </property>

    3.刷新节点命令变成:yarn rmadmin -refreshNodes


五、MapReduce
-------------------------------------------------------
    1.shuffle: M 和 R之间进行数据分发

    2.分区: Map端的工作,预先对产生的kv进行分组。相同的k进入同一个reduce中


六、运行本地MR作业流程
----------------------------------------------------------
    1.MR.Job提交作业并等待完成

    2.通过作业提交器jobsubmitter,将MR.Job的所需的环境和(job.xml,job.jar,spilt等数据信息)的文件,写入到临时目录,供后续流程加载使用

    3.通过作业提交器jobsubmitter,将MR.Job提交给本地任务运行器LocalJobRunner

    4.本地任务运行器LocalJobRunner将MR.Job封装,转成自己内部的job对象(LocalJobRunner$Job)

    5.内部Job(本质是线程),开启自身分线程;

    6.内部Job执行run(),分别计算Map和Reduce的任务MapTask,ReduceTask信息(TaskID,TaskInfo等信息)

    7.内部Job通过线程池孵化新线程,执行MapTask和ReduceTask任务

七、Intellij Idea 使用Maven打Jar包
----------------------------------------------------
    1.在项目的pom.xml文件中,添加
    <packaging>jar</packaging>
    注意:此选项与<dependencies>...</dependencies>同级位置

    2.找到Maven Project面板 --> lifecycle --> 双击package

    3.注意,此时打包之前会默认先执行Test单元测试,可以禁用

    4.禁用单元测试:skip test mode 一个蓝色闪电图标

    5.jar包位置:target --> *.jar文件就是了

    6.注意:jar包中会包含resources中的文件


八、hdfs的切片计算方式
------------------------------------------------
    1.返回值就是1: getFormatMinSplitSize() = 1

    2.获取配置文件设置的切片最小值,与1对比 (mapreduce.input.fileinputformat.split.minsize>=1)
        long minSize = Math.max(getFormatMinSplitSize(), getMinSplitSize(job));

    3.获取配置文件设置的切片最大值(<= Long.Max , mapreduce.input.fileinputformat.split.maxsize=)
        long maxSize = getMaxSplitSize(job);

    4.获取hdfs的blocksize大小
        long blockSize = file.getBlockSize();

    5.比较,然后取minSplit maxSplit blockSize 三者中的中间值
        Math.max(minSize, Math.min(maxSize, blockSize));

    6.最大和最小切片,可以通过代码指定
        FileInputFormat.setMaxInputSplitSize(job,maxSize);
        FileInputFormat.setMinInputSplitSize(job,minSize);

猜你喜欢

转载自blog.csdn.net/xcvbxv01/article/details/82258289