• MapReduce、hive、hadoop的一些笔记


    mr:

    input–split—map—shuffler(洗牌,合并和排序)-reduce(浓缩)–final

    split 默认是按行分 map的value默认按空格分隔

    conf/mapred-site.xml:

    ?
    ?????
    ?????????mapred.job.tracker
    ?????????localhost:9001
    ?????
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    mr:

    http://node1:50030 rpc端口是9001

    hive -e “hql”

    hive -f hql.file

    hive jdbc hive-server2

    hbase:hadoop database nosql列式存储(mogodb),非关系型数据库,hbase如何判断是同一行?通过看rowkey是否一致

    timestamp:修改的版本

    cf1:列族 column family 每个列都必须属于某个列族,一个列族下面可以有多个列

    hadoop2.5.2:

    1.hosts

    2.免密码登录互相

    3.tar -zxvf hadoop-2.5.2_x64.tar.gz

    4.ls -sf /root/hadoop-2.5.2/ /home/hadoop-2.5

    5.cd /home/hadoop-2.5/etc/hadoop

    6.vi hadoop-env.sh:java_home

    7.vi hdf-site.xml:

    配置服务名:
    ?
    ??dfs.nameservices
    ??mycluster
    
    配置nn的名字:
    
    ??dfs.ha.namenodes.mycluster
    ??nn1,nn2
    
    配置两个nn的rpc:
    
    ??dfs.namenode.rpc-address.mycluster.nn1
    ??node1:8020
    
    
    ??dfs.namenode.rpc-address.mycluster.nn2
    ??node2:8020
    
    配置两个nn的rpc:
    
    ??dfs.namenode.http-address.mycluster.nn1
    ??node1:50070
    
    
    ??dfs.namenode.http-address.mycluster.nn2
    ??node2:50070
    
    配置journalnode的url地址:
    
    ??dfs.namenode.shared.edits.dir
    ??qjournal://node2:8485;node3:8485;node4:8485/mycluster
    
    客户端使用下面的类找到active?nn:
    
    ??dfs.client.failover.proxy.provider.mycluster
    ??org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
    
    配置私钥,文件名是什么就些什么:
    
    ??dfs.ha.fencing.methods
    ??sshfence
    
    
    ??dfs.ha.fencing.ssh.private-key-files
    ??/root/.ssh/id_dsa
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    配置jn的工作目录:

    
    ??dfs.journalnode.edits.dir
    ??/opt/jn/data
    
    
    • 1
    • 2
    • 3
    • 4

    配置自动切换(也允许自动切换):

    
    ???dfs.ha.automatic-failover.enabled
    ???true
    ?
    
    • 1
    • 2
    • 3
    • 4

    8.vi core-site。xml:

    配置nn的入口(mycluster表示你前边配置的集群名字):

    
    ??fs.defaultFS
    ??hdfs://mycluster
    
    
    • 1
    • 2
    • 3
    • 4

    配置zk所在机器:

    ?
    ???ha.zookeeper.quorum
    ???node1:2181,node2:2181,node3:2181
    ?
    
    • 1
    • 2
    • 3
    • 4

    配置hadoop的工作目录:

    
    ???hadoop.tmp.dir
    ???/opt/hadoop2
    ?
    
    • 1
    • 2
    • 3
    • 4

    9.安装zk3.4.6 3个机器上都要启动啊

    10.vi slaves,配置datanode所在机器,journalnn替代了secondary nn:

    node2

    node3

    node4

    11.把压缩包拷贝到所有机器上,解压,并把所有配置文件拷贝过去

    12. 在node2,node3,node4上./hdfs-daemon.sh start journalnode jps

    13.在任意一台nn上执行:./bin/hdfs namenode -format,在hadoop工作目录(/opt/hadoop2)查看下fsimg是否生成了

    14.启动(否则15步执行不成功)已经格式化过的nn:./hdfs-daemon.sh start namenode jps

    15.在没有格式化的nn上执行,拷贝已经启动的nn上的fsimg:./bin/hdfs namenode -bootstrapStandby,cd /opt/hadoop2下看是否有fsimg生成

    16.在任意一台nn上执行,会在zk上创建一个znode节点: ./bin/hdfs zkfc -formatZK

    16。在node1上执行: ./sbin/stop-dfs.sh

    17、在node1上执行: ./sbin/start-dfs.sh 会依次启动 nn,dn,jn,zkfc,zkfc

    18.通过jps查看

    19.http://node1:50070查看hdfs的管理界面 两个nn,用node2也可以

    放个文件可以在浏览器上查看:

    20. ./bin/hdfs dfs -mkdir -p /usr/file

    21. ./bin/hdfs dfs -put /root/a.txt

    配置mr:

    22.vi mapred-site.xml:

    指定mr放在yarn上:

    mapreduce.framework.name

    yarn

    23.vi yarn-site.xml:

    yarn.resourcemanager.hostname

    node1

    yarn.nodemanager.aux-services

    mapreduce_shuffle

    yarn.nodemanager.aux-services.mapreduce.shuffle.class

    org.apache.hadoop.mapred.ShuffleHandler

    24,./start-all.sh 访问rm(mapreduce的管理界面):

    http://node1:8088(https 8090)

    总结:即zkServer.sh start + start-all.sh

    hive0.13.1,必须要有hadoop,在hdfs和mr都没问题的情况下再安装hive,放在集群中的任意一台机器上都可以:

    cli:

    hive -e “hsql”

    hive -f “hsql.sql”

    hive --help

    hive -i x.sql :在hive启动的时候,用来初始化设定hive的属性

    hive 进入交互式(客户端):

    quit

    selet a.* from tab1 a;

    show databases;

    show tables;

    desc t_temp;

    ddl:

    create database if not exists db1;

    drop database if exists db1;

    use db1;

    create table t_emp(

    id int,

    name string,

    age int,

    dept_name string

    ) partitioned by (ds string)

    row format delimited fields terminated by ‘,’ stored as textfile;

    create table t_person(

    id int,

    name string,

    like array,

    tedian map)

    row format delimited fields terminated by ‘,’

    collection items terminated by ‘_’

    map keys terminated by ‘:’;

    1,zs,sports_play_read,xingge:baozao_sex:male_color:red

    dml:

    load data local inpath ‘/root/emp.txt’ into table t_emp partition(ds=‘2018-01-17’);

    export table t_result to ‘/usr/input/result.txt’;#是hdfs的/usr/input/目录

    dql:跟关系型db基本一样

    hive的安装:

    tar -zxvf apache-hive-0.13.1.bin.tar.gz

    hive-default.xml.template–>hive-site.xml

    cd hive/bin/

    ./hive 即可启动

    修改元数据存储的关系型数据库derby:

    yum -y install mysql-server

    service mysqld start

    cp /root/installs/conn-java.jar /home/hive/lib

    grant all on *.* to root@‘%’ identified by ‘123456’;

    grant all on *.* to root@‘node1’ identified by ‘123456’;

    create database hive;

    vi hive-site.xml:

    jdbc:mysql://node1/hive

    com.mysql.jdbc.Driver

    root

    123456

    启动: ./hive

    #虽然没有再hive中配置任何hadoop的东西,但是在hadoop会自动在hdfs创建/usr/hive/warehouse/t_emp/目录,

    #目录下面有emp.txt,hive上的数据最终还是在hdfs上(因为配置了hadoop的环境变量)

    #hive的表名就是一个文件夹,分区就是在表名文件夹下再按分区名建文件夹

    load data local inpath ‘/root/emp.txt’ into table t_emp;

    select count(*) from t_emp;

    尽量把文件传入到hdfs上的hive目录里

    hql脚本执行的方式:

    1.在hive交互式命令行

    2.hive -e

    3.hive -f

    4. 通过hive jdbc在java代码里面执行 hive解压后/lib/*.jar+hadoop的jar包

    要想通过jdbc连接hive,需要把hive变成服务啊:

    ./hive --service hiveserver2

    netstat -tunpl|grep 10000,发现是使用127.0.0。1监听的这个端口

    vi hive-site.xml:

    hive.server2.thrift.bind.host

    localhost—>node1

    hive变成服务后,可以在命令行测试是否可以连接:

    ./beeline

    !connect jdbc:hive2://node1:10000/default

    root

    空密码 发现连接成功。

    show tables

    结果:for input string ‘5000L’,出错了:

    vi hive-site.xml:

    hive.server2.long.polling.timeout

    5000L–>5000 改好之后就不报错了,hive配置服务成功,可以用java连接了。

    habase:

    tar 解压即可

    hbase伪分布式搭建(不需要hadoop环境,hbase使用自己内部的zookeeper):

    hbase-env.sh:

    JAVA_HOME

    hbase-site.xml:

    hbase.rootdir

    <!–/tmp/hbase/data(下面是命名空间)/default(表的父目录)/person/xxx(一个table里面有多个

    region,region里面有

    sotre,store分为memstore和storefile,每个store对应一个列族

    )/cf1(数据小的时候,需要在hbase执行flush才看得到数据)/n个文件

    hbase hfile -p -f yyyyyy(以key-value方式查看storefile) --》

    file:///tmp/hbase

    hbase.zookeeper.property.dataDir

    /tmp/zookeeper

    启动:

    start-hbase.sh

    hbase shell进入交互式:

    help

    普通:

    status

    whoami:root

    version:hbase版本

    ddl:

    create ‘person’,‘cf1’,‘cf2’

    list (show tables跟差不多)

    describe 'person ':blocksize=>65536(64M)

    put ‘person’,‘00001’,‘cf1:name’,‘zhao’ :添加

    put ‘person’,‘00001’,‘cf1:sex’,‘male’

    #scan全表扫描

    scan ‘person’ :查看表数据

    每一个单元格都有一个timestamp

    #不全表扫描查询

    get ‘person’,‘00001’,‘cf1:name’

    #再加一条,再通过get ‘person’,‘00001’,'cf1:name’查询的时候只会得到zhao2

    put ‘person’,‘00001’,‘cf1:name’,‘zhao2’

    删除表:

    disable ‘tb1’

    drop ‘tb1’

    表空间:

    list_namespace

    default

    hbase(类似mysql里面的mysql数据库)

    dml:

    put get scan

    tools:

    flush ‘person’:把memstore里面的数据写入到stroefile

    hbase的web管理界面

    http://node112:60010

    hbase完全分布式:

    hbase-env.sh:

    JAVA_HOME

    export HBASE_MANAGES_ZK=false (使用自己的zk集群)

    hbase-site.xml:

    hbase.rootdir

    <!–目录会自己创建-》

    hdfs://mycluster/hbase

    hbase.cluster.distributed

    true

    hbase.zookeeper.quorum

    node112,node113,node1124

    hbase.zookeeper.property.dataDir

    zookeeper集群的数据目录

    vi regionservers:

    node2

    node3

    node4

    vi backup-masters(自己创建):

    node1

    把hadoop的etc/hadoop/ hdfs-site.xml拷贝到hbase的conf目录下

    跟hadoop一样,在所有安装hbase的机器上把配置文件拷贝过去

    在master上启动一下hbase,hadoop先启动(zk先启动):

    start-hbase.sh

    jps:hmaster hregionserver(又叫server)

    kill -9 node5 HMaster

    发现node1变为master了

    -------------------------------------------------------------------

    单独启动namenode:

    sbin/hadoop-daemon.sh??start/stop?namenode
    
    • 1

    单独启动datanode:

    sbin/hadoop-daemon.sh??start/stop?datanode
    
    • 1

    单独启动resourcemanager:

    sbin/yarn-daemon.sh??start/stop?resourcemanager
    
    • 1

    单独启动nodemanager:

    sbin/yarn-daemon.sh??start/stop?nodemanager
    
    • 1

    在hdfs上创建文件夹:

    hadoop?fs??-mkdir?-p?/user/roadjava/inputs?,当然hadoop?fs也可以换成hdfs?fs
    
    • 1

    递归查看hdfs上的文件名(跟在默认的50070web界面上看类似):

    hadoop?fs??-ls?-R?/
    
    • 1

    查看hdfs上文件的内容:

    haddop?fs?-cat??/user/roadjava/out/part_r_0000
    
    • 1

    删除/user/roadjava以及其子目录:

    hadoop?fs?-rmr?/user/roadjava
    
    • 1

    往hdfs上传文件:

    hadoop?fs?-put?/usr/local/test.txt?/user/roadjava/input/
    
    • 1

    上传到hdfs上之后,hdfs自然也是存储在我们的硬盘上,那么这个路径是什么呢?类似:

    [root@node113?subdir0]$?pwd
    /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/
    finalized/subdir0/subdir0
    
    • 1
    • 2
    • 3

    查看一下有什么文件呢?

    -rw-rw-r--.?1?atguigu?atguigu?134217728?5月??23?16:01?blk_1073741836
    -rw-rw-r--.?1?atguigu?atguigu???1048583?5月??23?16:01?blk_1073741836_1012.meta
    -rw-rw-r--.?1?atguigu?atguigu??63439959?5月??23?16:01?blk_1073741837
    -rw-rw-r--.?1?atguigu?atguigu????495635?5月??23?16:01?blk_1073741837_1013.meta
    
    • 1
    • 2
    • 3
    • 4

    如果一个文件超过了默认的128M,会被分成多个,我们使用cat看其中一个就会是乱码,这时候如果想使用cat命令查看,可以自己拼接某个文件的多个块。

    [root@node113?subdir0]$?cat?blk_1073741836>>tmp.file
    [root@node113?subdir0]$?cat?blk_1073741837>>tmp.file
    [root@node113?subdir0]$?tar?-zxvf?tmp.file
    
    • 1
    • 2
    • 3

    hadoop 1.x上没有yarn,2.x才有了yarn。

    hadoop的配置文件

    Hadoop配置文件分两类:默认配置文件(在hadoop的jar包里面)和自定义配置文件(/etc/hadoop/xx.xml),只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

    默认的配置文件:

    [core-default.xml]
    hadoop-common-2.7.2.jar/?core-default.xml
    [hdfs-default.xml]
    hadoop-hdfs-2.7.2.jar/?hdfs-default.xml
    [yarn-default.xml]
    hadoop-yarn-common-2.7.2.jar/?yarn-default.xml
    [core-default.xml]
    hadoop-mapreduce-client-core-2.7.2.jar/?core-default.xml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    对应的、优先级更高的自定义配置文件:

    存放在$HADOOP_HOME/etc/hadoop的

    core-site.xml
    hdfs-site.xml
    yarn-site.xml
    mapred-site.xml
    
    • 1
    • 2
    • 3
    • 4

    hadoop启动方式总结

    1)各个服务组件逐一启动(新增/减少节点时使用)

    (1)分别启动hdfs组件

    hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode

    (2)启动yarn

    yarn-daemon.sh start|stop resourcemanager|nodemanager

    2)各个模块分开启动(配置ssh是前提)常用

    (1)整体启动/停止hdfs

    start-dfs.sh

    stop-dfs.sh

    (2)整体启动/停止yarn

    start-yarn.sh

    stop-yarn.sh

    3)全部启动(不建议使用)

    start-all.sh

    stop-all.sh

    -----hdfs命令行操作hadoop fs 使用总结-----

    1)基本语法

    bin/hadoop fs 具体命令

    1. 常用命令实操

    (1)-help:输出这个命令参数

    bin/hdfs dfs -help rm

    (2)-ls: 显示目录信息

    hadoop fs -ls /

    (3)-mkdir:在hdfs上创建目录

    hadoop fs -mkdir -p /aaa/bbb/cc/dd

    (4)-moveFromLocal从本地剪切粘贴到hdfs

    hadoop fs - moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd

    (5)-moveToLocal:从hdfs剪切粘贴到本地

    hadoop fs - moveToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt

    (6)–appendToFile :追加一个文件到已经存在的文件末尾

    hadoop fs -appendToFile ./hello.txt /hello.txt

    (7)-cat :显示文件内容

    (8)-tail:显示一个文件的末尾

    hadoop fs -tail /weblog/access_log.1

    (9)-text:以字符形式打印一个文件的内容

    hadoop fs -text /weblog/access_log.1

    (10)-chgrp 、-chmod、-chown:linux文件系统中的用法一样,修改文件所属权限

    hadoop fs -chmod 666 /hello.txt

    hadoop fs -chown someuser:somegrp /hello.txt

    (11)-copyFromLocal:从本地文件系统中拷贝文件到hdfs路径去

    hadoop fs -copyFromLocal ./jdk.tar.gz /aaa/

    (12)-copyToLocal:从hdfs拷贝到本地

    hadoop fs -copyToLocal /aaa/jdk.tar.gz

    (13)-cp :从hdfs的一个路径拷贝到hdfs的另一个路径

    hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2

    (14)-mv:在hdfs目录中移动文件

    hadoop fs -mv /aaa/jdk.tar.gz /

    (15)-get:等同于copyToLocal,就是从hdfs下载文件到本地

    hadoop fs -get /aaa/jdk.tar.gz

    (16)-getmerge :合并下载多个文件,比如hdfs的目录 /aaa/下有多个文件:log.1, log.2,log.3,…

    hadoop fs -getmerge /aaa/log.* ./log.sum

    (17)-put:等同于copyFromLocal

    hadoop fs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2

    (18)-rm:删除文件或文件夹

    hadoop fs -rm -r /aaa/bbb/

    (19)-rmdir:删除空目录

    hadoop fs -rmdir /aaa/bbb/ccc

    (20)-df :统计文件系统的可用空间信息

    hadoop fs -df -h /

    (21)-du统计文件夹的大小信息

    hadoop fs -du -s -h /aaa/*

    (22)-count:统计一个指定目录下的文件节点数量

    hadoop fs -count /aaa/

    (23)-setrep:设置hdfs中文件的副本数量

    hadoop fs -setrep 3 /aaa/jdk.tar.gz

    注意:

    image.png

    这里设置的副本数只是记录在namenode的元数据中,是否真的会有这么多副本,还得看datanode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。

  • 相关阅读:
    陈志泊主编《数据库原理及应用教程第4版微课版》的实验题目参考答案实验4
    QT制作简易时钟
    项目环境配置
    记录:2022-9-10 完美数 快乐数 括号生成 请求调页 页面置换 写时复制 页面缓冲算法
    Lua学习笔记:分享一个用纯Lua写的位操作(异或)
    docker搭建Confluence(wiki)
    高效资产收集工具 -- Kunyu
    在九天服务器平台上使用自己上传的数据集文件
    pandas学习(三) grouping
    自媒体二号大前端主题模板 WordPress主题
  • 原文地址:https://blog.csdn.net/embelfe_segge/article/details/126434942