• 总结


    一、技术要点
    一、Linux基础

    二、Hadoop的背景知识与起源

    三、搭建Hadoop环境

    四、Apache Hadoop的体系结构

    五、HDFS

    六、MapReduce

    七、MapReduce编程案例

    八、NoSQL数据库之:HBase

    九、数据分析引擎之:Hive

    十、数据分析引擎之:Pig

    十一、数据采集引擎:Sqoop和Flume

    十二、集成管理工具:HUE

    十三、Hadoop HA的实现和HDFS的联盟

    十四、NoSQL数据库之:Redis

    十五、实时处理框架:Apache Storm

    linxu基础
    Hadoop
    HDFS
    MapReduce
    Hive

    sqoop
    Flume

    ZooKeeper

    Oozie
    HBase
    Kafka
    Storm

    Scale
    Spark

    Redis
    Elasticsearch
    MongoDB

    HDFS
    MapReduce

    Sqoop
    二、安装虚拟机
    1.软件包ubuntu-12.04.5-desktop-amd64.iso
    桥接模式
    把虚拟机当做一台完全独立的计算机,分配到独立的IP(和主机的IP同段),此时局域网可以互相ping通
    就像一个在路由器"民政局"那里"上过户口"的成年人,有自己单独的居住地址,虽然和主机住在同一个大院里,但好歹是有户口的人,可以大摇大摆地直接和外面通信。
    虚拟机和物理机连的是同一个网络,虚拟机和物理机是并列关系,地位是相当的。比如,你家有路由器,那么你的电脑和你的手机同时连接这个路由器提供的Wi-Fi,那么它们的关系就是这种模式。
    NAT模式
    虚拟机向外部网络发送的请求数据"包裹",都会交由NAT网络适配器加上"特殊标记"并以主机的名义转发出去,外部网络返回的响应数据"包裹",也是先由主机接收,然后交由NAT网络适配器根据"特殊标记"进行识别并转发给对应的虚拟机
    纯粹就是一个没上过户口的黑户,路由器"民政局"根本不知道有这么个人,自然也不会主动和它通信。即使虚拟机偶尔要向外面发送点的信件,都得交给主机以主机的名义转发出去,主机还专门请了一位叫做NAT的老大爷来专门负责这些虚拟机的发信、收信事宜。
    物理机会充当一个“路由器”的角色,虚拟机要想上网,必须经过物理机,那物理机如果不能上网,虚拟机也就不能上网了。之所以说这种模式兼容性最好,是因为物理机的网络环境变化时,虚拟机的网络并不会有影响,比如,上班时你把物理机连接在公司的网络环境中,下班后又把物理机连接在你家的路由器上。你公司的网段有可能和你家的网段是不同的。桥接模式下,虚拟机和物理机一样,都要自动获取IP才可以上网,而做实验的时候,是需要把虚拟机设置为静态IP的,这样就导致虚拟机网络不稳定。而设置为NAT模式,虚拟机的网络并不需要依赖你公司的网络环境或者你家的网络环境。
    仅主机模式
    使用仅主机模式网络连接的虚拟机无法连接到Internet
    仅主机模式的虚拟机,纯粹是一个彻彻底底的黑奴,不仅没有户口、路由器"民政局"不知道这么号人,还被主机关在小黑屋里,连信件也不准往外发。
    这种模式下,相当于拿一根网线直连了物理机和虚拟机。
    2.更新下系统软件,安装vim
    sudo apt-get update
    sudo apt-get install vim
    3.安装ssh
    sudo apt-get install openssh-server
    4.查IP
    ifconfig

    三、linux基础
    Linux内核版本有两种:稳定版和开发版
    Linux内核版本号由3个数字组成:r.x.y
    r:目前发布的内核主版本。
    x:偶数表示稳定版本;奇数表示开发中版本。
    y:错误修补的次数
    以版本号为例: 2.6.9-5.ELsmp ,
    r: 2 , 主版本号
    x: 6 , 次版本号,表示稳定版本
    y: 9 , 修订版本号 , 表示修改的次数
    头两个数字合在一齐可以描述内核系列。如稳定版的2.6.0,它是2.6版内核系列。
    5: 表示这个当前版本的第5次微调patch , 而ELsmp指出了当前内核是为ELsmp特别调校的
    EL : Enterprise Linux ;
    smp : 表示支持多处理器 , 表示该内核版本支持多处理器
    Linux目录结构
    bin 存放二进制可执行文件(ls,cat,mkdir等)
    boot 存放用于系统引导时使用的各种文件
    dev 用于存放设备文件
    etc 存放系统配置文件
    home 存放所有用户文件的根目录
    lib 存放跟文件系统中的程序运行所需要的共享库及内核模块
    proc 虚拟文件系统,存放当前内存的映射
    usr 用于存放系统应用程序,比较重要的目录/usr/local 本地管理员软件安装目录
    var 用于存放运行时需要改变数据的文件
    其他重要的目录
    root 超级用户目录
    mnt 系统管理员安装临时文件系统的安装点
    tmp 用于存放各种临时文件
    opt 额外安装的可选应用程序包所放置的位置
    VI编辑器的使用
    编辑模式:等待编辑命令输入
    插入模式:编辑模式下,输入 i 进入插入模式,插入文本信息
    命令模式:在编辑模式下,输入 “:” 进行命令模式
    按esc键,退出到编辑模式
    VI 使用的命令
    :q 直接退出vi
    :wq 保存后退出vi ,并可以新建文件
    :q! 强制退出
    :w file 将当前内容保存成某个文件
    :set number 在编辑文件显示行号
    :set nonumber 在编辑文件不显示行号
    文件目录操作命令
    ls显示文件和目录列表
    -l 列出文件的详细信息
    -a 列出当前目录所有文件,包含隐藏文件
    mkdir 创建目录
    -p 父目录不存在情况下先生成父目录
    cd 切换目录
    touch 生成一个空文件
    echo 生成一个带内容文件
    cat、tac 显示文本文件内容
    Cat是从第一行开始写;tac是从最后一行开始写
    cp 复制文件或目录
    rm 删除文件
    -r 同时删除该目录下的所有文件
    -f 强制删除文件或目录
    mv 移动文件或目录、文件或改名
    find 在文件系统中查找指定的文件
    -name 文件名
    wc 统计文本文档的行数,字数,字符数
    grep 在指定的文本文件中查找指定的字符串
    例如:grep best book.txt
    rmdir 删除空目录
    tree 显示目录目录改名树
    pwd 显示当前工作目录
    ln 建立链接文件
    例如 ln -s /home/itcast/familyA/house/roomB /home/roomB (目录名在前,连接名在后)
    more,less 分页显示文本文件内容
    head,tail分别显示文件开头和结尾内容
    系统管理命令
    stat 显示指定文件的相关信息,比ls命令显示内容更多
    who, w 显示在线登录用户
    hostname 显示主机名称
    uname显示系统信息
    top 显示当前系统中耗费资源最多的进程
    top –d 2 : 每两秒钟更新一次 top ,观察整体信息
    ps 显示瞬间的进程状态
    ps –ef 使用标准格式显示每个进程信息
    du 显示指定的文件(目录)已使用的磁盘空间的总量(磁盘块数)
    df 显示文件系统磁盘空间的使用情况
    free 显示当前内存和交换空间的使用情况
    ifconfig 显示网络接口信息
    ping 测试网络的连通性
    netstat 显示网络状态信息
    man 命令帮助信息查询
    clear 清屏
    kill 杀死一个进程
    打包压缩命令
    gzip 压缩(解压)文件或目录,压缩文件后缀为gz
    bzip2 压缩(解压)文件或目录,压缩文件后缀为bz2
    tar 文件、目录打(解)包
    关机/重启命令
    shutdown系统关机
    -r 关机后重启
    -h 关机后不重新启动
    -now 立即关机
    halt 关机后关闭电源
    reboot 重新启动
    Linux 通道
    简单地说,一个通道接受一个工具软件的输出,然后把那个输出输入到其它工具软件。使用UNIX/Linux的词汇,这个通道接受了一个过程的标准输出,并把这个标准的输出作为另一个过程的标准输入。如果你没有重新定向这个输出,这个输出就在屏幕上显示出来。使用一个通道,你可以重新定向这个输出,这样它就变成了另一个工具软件的标准的输入。
    grep 命令用于查找文件里符合条件的字符串,如果发现某文件的内容符合所指定的条件,预设 grep 指令会把含有条件的那一列显示出来。
    在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。
    $ grep test test* #查找前缀有“test”的文件包含“test”字符串的文件
    testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行
    testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行
    testfile_2:Linux test #列出testfile_2 文件中包含test字符的行
    以递归的方式查找符合条件的文件。例如,查找指定目录/etc/acpi 及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容,使用的命令为:
    $ grep -r update /etc/acpi #以递归的方式查找“etc/acpi”
    #下包含“update”的文件
    /etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.)
    Rather than
    /etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of
    IO.) Rather than
    /etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update
    反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。查找文件名中包含 test 的文件中不包含test 的行,此时,使用的命令为:
    $ grep-v test* #查找文件名中包含test 的文件中不包含test 的行
    testfile1:helLinux!
    testfile1:Linis a free Unix-type operating system.
    testfile1:Lin
    testfile_1:HELLO LINUX!
    testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.
    testfile_1:THIS IS A LINUX TESTFILE!
    testfile_2:HELLO LINUX!
    testfile_2:Linux is a free unix-type opterating system.
    ubuntu怎么切换到root用户
    输入命令 "sudo passwd root"提示输入当前用户密码,不用管他,直接回车跳过即可
    然后会提示"输入新的UNIX密码",此时输入要设置的root密码,提示"重新输入新的UNIX密码"此时再输入一次root密码
    提示 "passwd:已成功更新密码",运行命令 “su root”提示“密码:"此时输入刚刚设置的root密码回车
    使用su czl命令,切换到普通用户czl。
    文件权限管理
    R 读权限
    W 写权限
    X 执行权限
    查看文件和目录的权限
    ls –l 文件名
    显示信息包含:
    文件类型(d 目录,- 普通文件,l 链接文件),文件权限,文件的属主,文件的所属组,文件的大小,文件的创建时间,文件的名称
    -rw-r--r-- 1 itcast users 2254 2006-05-20 13:47 tt.htm
    从第二个字符起rw-是说用户itcast有读、写权,没有运行权,
    接着的r--表示用户组users只有读权限,没有运行权,
    最后的r--指其他人(others)只有读权限,没有写权和运行权。
    更改操作权限
    chmod 【u 属主 g 所属组用户 o 其他用户 a 所有用户】 【+ 加权限 – 减权限 =加权限同时将原有权限删除】 【rwx】 文件或目录名 -R 下面的子目录做相同权限操作
    也可以用数字来表示权限如 chmod 777 file
    r 4 w 2 x 1
    若要rwx属性则4+2+1=7;
    若要rw-属性则4+2=6;
    若要r-x属性则4+1=5;
    r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录信息的权限。
    w(Write,写入):对文件而言,具有新增,修改 文件内容的权限(但不含删除该文件);对目录来说,具有新建,删除,修改,移动目录内文件的权限。
    x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限。
    绝对路径:
    路径的写法,由根目录 / 写起,例如: /usr/share/doc 这个目录。
    相对路径:
    路径的写法,不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd ../man 这就是相对路径的写法啦!
    which命令
    用于查找文件。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。
    export命令
    export 命令用于设置或显示环境变量
    在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。
    tree命令 tree -L 2
    tree -d 只显示文件夹;
    tree -L n 显示项目的层级。n表示层级数。比如想要显示项目三层结构,可以用tree -l 3;
    tree -I pattern 用于过滤不想要显示的文件或者文件夹。比如你想要过滤项目中的node_modules文件夹,可以使用tree -I "node_modules";
    tree > tree.md 将项目结构输出到tree.md这个文件。

    tree -L 2 #显示项目的层级。n表示层级数。
    
    tree hadoop-2.7.3  -d -L 3 #只显示文件夹
    

    passwd
    passwd命令用来更改使用者的密码
    passwd runoob //设置runoob用户的密码
    Enter new UNIX password: //输入新密码,输入的密码无回显
    Retype new UNIX password: //确认密码
    passwd: password updated successfully
    Linux 文件基本属性
    当为[ d ]则是目录
    当为[ - ]则是文件;
    若是[ l ]则表示为链接文档(link file);
    若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
    若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
    创建hadoop用户
    $ sudo useradd -m hadoop -s /bin/bash #创建hadoop用户,并使用/bin/bash作为shell
    $ sudo passwd hadoop #为hadoop用户设置密码,之后需要连续输入两次密码
    $ sudo adduser hadoop sudo #为hadoop用户增加管理员权限
    $ su - hadoop #切换当前用户为用户hadoop
    $ sudo apt-get update #更新hadoop用户的apt,方便后面的安装
    安装SSH,设置SSH无密码登陆
    $ sudo apt-get install openssh-server #安装SSH server
    $ ssh localhost #登陆SSH,第一次登陆输入yes
    $ exit #退出登录的ssh localhost
    $ cd ~/.ssh/ #如果没法进入该目录,执行一次ssh localhost
    $ ssh-keygen -t rsa  

    输入完  $ ssh-keygen -t rsa 语句以后,需要连续敲击三次回车
    其中,第一次回车是让KEY存于默认位置,以方便后续的命令输入。第二次和第三次是确定passphrase,相关性不大。两次回车输入完毕以后
    
    之后再输入:
    $ cat ./id_rsa.pub >> ./authorized_keys #加入授权
    $ ssh localhost  #此时已不需密码即可登录localhost,并可见下图。如果失败则可以搜索SSH免密码登录来寻求答案
    

    环境变量配置的区别
    /etc/profile
    为系统的每个用户设置环境信息和启动程序,当用户第一次登录时,该文件被执行,其配置对所有登录的用户都有效。
    /etc/environment
    系统的环境变量,/etc/profile是所有用户的环境变量,前者与登录用户无关,后者与登录用户有关,当同一变量在两个文件里有冲突时,以用户环境为准。
    /etc/bashrc
    为每个运行 bash shell 的用户执行该文件,当 bash shell 打开时,该文件被执行,其配置对所有使用bash的用户打开的每个bash都有效。当被修改后,不用重启只需要打开一个新的 bash 即可生效。
    ~/.bash_profile
    为当前用户设置专属的环境信息和启动程序,当用户登录时该文件执行一次。默认情况下,它用于设置环境变量,并执行当前用户的 .bashrc 文件。理念类似于 /etc/profile,只不过只对当前用户有效,也需要重启才能生效。
    ~/.bash_logout
    为当前用户,每次退出bash shell时执行该文件,可以把一些清理工作的命令放进这个文件。
    ~/.bashrc
    为当前用户设置专属的 bash 信息,当每次打开新的shell时,该文件被执行。理念类似于/etc/bashrc,只不过只对当前用户有效,不需要重启只需要打开新的shell即可生效。
    /etc/profile.d/
    可以简单的理解为是/etc/profile的一部分,只不过按类别或功能拆分成若干个文件进行配置了(方便维护和理解)。
    注意事项
    以上需要重启才能生效的文件,其实可以通过source xxx暂时生效。
    文件的执行顺序为:当登录Linux时,首先启动/etc/environment和/etc/profile,然后启动当前用户目录下的/.bash_profile,执行此文件时一般会调用/.bashrc文件,而执行/.bashrc时一般会调用/etc/bashrc,最后退出shell时,执行/.bash_logout。
    简单来说顺序为:
    (登录时)/etc/environment –> /etc/profile(以及/etc/profile.d/里的文件) –>
    ~/.bash_profile –> (打开shell时)~/.bashrc –> /etc/bashrc –>
    (退出shell时)~/.bash_logout
    查看ssh是否启动,有sshd说明已经启动
    sudo ps -e |grep ssh
    启动ssh服务
    sudo service ssh start
    安装ssh服务
    sudo apt-get install openssh-server
    查看ssh是否安装成功
    ssh -V
    更新源列表
    sudo apt-get update
    export 命令
    export 命令用于设置或显示环境变量。
    在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。
    什么时RPC
    远程过程调用。调用过程代码并不是在调用者本地运行,而是要实现调用者和被调用者之间的连接和通信,
    它对client提供了远程服务的过程抽象,其底层消息传递操作对client是透明的。
    在RPC中,client即使请求服务的调用者,而server则是执行client的请求而被调用的程序。
    Linux中查看位数的命令:
    getconf LONG_BIT
    ctrl+l
    清屏
    Ubuntu设置root密码,ubuntu怎么切换到root用户,切换到root账号方法
    sudo passwd root
    提示"输入新的UNIX密码",此时输入要设置的root密码,提示"重新输入新的UNIX密码"此时再输入一次root密码。
    提示 "passwd:已成功更新密码",运行命令 “su root”,提示“密码:"此时输入刚刚设置的root密码回车,切换root用户成功。
    which命令
    which命令用于查找文件。
    which指令会在环境变量(PATH设置的目录里查找符合条件的文件。 linux6.5 永久关闭防火墙 [root@192 etc]# #查看当前服务器防火墙状态service iptables status [root@192 etc]# service iptables stop #永久关闭防火墙 iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: [ OK ] [root@192 etc]# service iptables status iptables: Firewall is not running. 三、安装JDK 1.克隆虚拟机->0->1->2->3->4->5,其中最接近原虚拟机的是0 2.在root用户下在/目录下创建tools、training目录,tools目录存放安装包,training安装目录。ubuntu的root密码为czl 3. /tools目录下解压到/training tar -zxvf jdk-8u144-linux-x64.tar.gz -C /training 4.设置环境变量 vim /etc/profile 5.在文件末尾加入 export JAVA_HOME=/training/jdk1.8.0_144 export JRE_HOME=){JAVA_HOME}/jre
    export CLASSPATH=.:({JAVA_HOME}/lib:){JRE_HOME}/lib
    export PATH=({JAVA_HOME}/bin:)PATH

    	export JAVA_HOME=/training/jdk1.8.0_144
    	export PATH=$JAVA_HOME/bin:$PATH			
    6.使配置生效
    	source /etc/profile
    7.检查是否生效
    	java -version
    	
    	java version "1.8.0_144"
    	Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
    	Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)		
    8.Java的死锁分析
    	cd /home/czl/Downloads/IBMHeapAnalyzer
    	javac DeadLock.java
    	java DeadLock
    	
    	czl@ubuntu:~$ which jps #jps 是jdk的一个命令
    	/training/jdk1.8.0_144/bin/jps
    	czl@ubuntu:~$ jps
    	5443 DeadLock
    	6046 Jps
    	czl@ubuntu:~$ kill -3 5443
    	czl@ubuntu:~$ 
    	=============================
    	"Thread-1":
    	  waiting to lock monitor 0x00007f4ae8003828 (object 0x00000000f5a5dba8, a java.lang.Object),
    	  which is held by "Thread-0"
    	"Thread-0":
    	  waiting to lock monitor 0x00007f4ae80062c8 (object 0x00000000f5a5dbb8, a java.lang.Object),
    	  which is held by "Thread-1"
    
    	Java stack information for the threads listed above:
    	===================================================
    

    四、Hadoop的安装配置
    1./tools目录下解压到/training,root密码czl
    tar -zxvf hadoop-2.7.3.tar.gz -C /training

    	czl@ubuntu:/training$ tree hadoop-2.7.3  -d -L 3 
    	hadoop-2.7.3  #hadoop的home目录
    	├── bin   #hadoop的操作命令
    	├── etc  
    	│   └── hadoop  #所有的配置文件
    	├── include
    	├── lib
    	│   └── native
    	├── libexec
    	├── sbin     #hadoop集群的命令
    	└── share
    		├── doc
    		│   └── hadoop
    		└── hadoop
    			├── common
    			├── hdfs
    			├── httpfs
    			├── kms
    			├── mapreduce
    			├── tools
    			└── yarn
    	设置 hadoop 的环境变量
    		将下面代码添加到/etc/profile文件:
    			export HADOOP_HOME=/training/hadoop-2.7.3
    			export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
    	使配置生效
    		source /etc/profile
    	检查是否生效
    		start + 两次按Tab键
    		czl@ubuntu:/training/hadoop-2.7.3$ start
    		start                 start-dfs.cmd         start-pulseaudio-x11  start-yarn.cmd
    		start-all.cmd         start-dfs.sh          start-secure-dns.sh   start-yarn.sh
    		start-all.sh          startpar              start-stop-daemon     
    		start-balancer.sh     start-pulseaudio-kde  startx  
    2. Hadoop的三种安装模式
    	1.本地模式
    		没有HDFS,只能测试MapReduce程序(不是运行在Yarn中,做一个独立的Java程序来运行)
    		hadoop所有的配置文件在	/training/hadoop-2.7.3/etc/hadoop 里面
    		Java的home目录在哪里
    			czl@ubuntu:/training/hadoop-2.7.3$ echo $JAVA_HOME
    			/training/jdk1.8.0_144
    		
    		更改hadoop-2.7.3/etc/hadoop/hadoop-env.sh
    		export JAVA_HOME=${JAVA_HOME} #改为	export JAVA_HOME=/training/jdk1.8.0_144											
    		
    		测试MapReduce程序:																														
    			Example:/training/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar
    			命令:
    			cd /training/hadoop-2.7.3/share/hadoop/mapreduce/
    			hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /home/czl/Documents/input/data.txt /home/czl/Documents/output/wc
    																		
    			/home/czl/Documents/input/data.txt /home/czl/Documents/output/wc路径都是本地Linux的路径														
    			/home/czl/Documents/input/data.txt可以是目录														
    			/home/czl/Documents/output/wc														
    			data.txt
    				I love China
    				I lova BeiJing
    				BeiJing is the capital of China						
    																	
    			结果:
    				czl@ubuntu:~$ cd Documents
    				czl@ubuntu:~/Documents$ tree
    				.
    				├── input
    				│   └── data.txt
    				└── output
    					└── wc
    						├── part-r-00000
    						└── _SUCCESS
    
    				3 directories, 3 files
    				czl@ubuntu:~/Documents$ more output/wc/part-r-00000
    				BeiJing 2
    				China   2
    				I       2
    				capital 1
    				is      1
    				lova    1
    				love    1
    				of      1
    				the     1
    				czl@ubuntu:~/Documents$ 																					
    	2.伪分布模式
    		在单机上,模拟一个分布式的环境,具备Hadoop的所有功能														
    			export JAVA_HOME=${JAVA_HOME} #改为	export JAVA_HOME=/training/jdk1.8.0_144													
    			
    			hdfs-site.xml
    			/training/hadoop-2.7.3/etc/hadoop/hdfs-site.xml
    			<!--配置数据块的冗余度,默认是3-->
    			<!--原则冗余度跟数据节点个数保持一致,最大不要超过3-->
    			<property>
    				<name>dfs.replication</name>
    				<value>1</value>
    			</property>
    			<!--是否开启HDFS的权限检查,默认是true-->
    			<!--使用默认值,后面会改为false-->
    			<!--
    			<property>	
    				<name>dfs.permissions</name>
    				<value>false</value>
    			</property>				
    			-->																							
    			
    			core-site.xml	
    			/training/hadoop-2.7.3/etc/hadoop/core-site.xml													
    			<!--配置HDFS主节点的地址,就是NameNode的地址-->
    			<!--9000是RPC通信的端口-->
    			<property>	
    				<name>fs.defaultFS</name>
    				<value>hdfs://192.168.16.140:9000</value>
    			</property>	
    			<!--HDFS数据块和元信息保存在操作系统的目录位置-->
    			<!--默认是Linux的tmp目录,一定要修改-->
    			<property>	
    				<name>hadoop.tmp.dir</name>
    				<value>/training/hadoop-2.7.3/tmp</value>
    			</property>																	
    																
    			mapred-site.xml																	
    			<!--MR程序运行容器或者框架-->
    			<property>
    				<name>mapreduce.framework.name</name>
    				<value>yarn</value>
    			</property>																		
    																
    			yarn-site.xml																	
    			<!--配置Yarn主节点的位置-->
    			<property>	
    				<name>yarn.resourcemanager.hostname</name>
    				<value>192.168.16.140</value>
    			</property>
    			<!--NodeManager执行MR任务的方式是Shuffle洗牌-->
    			<property>	
    				<name>yarn.nodemanager.aux-services</name>
    				<value>mapreduce_shuffle</value>
    			</property>																		
    																
    			对HDFS的NameNode进行格式化  -----> 目录:/training/hadoop-2.7.3/tmp													
    			成功: Storage directory /training/hadoop-2.7.3/tmp/dfs/name has been successfully formatted.													
    
    			Root启动:
    				HDFS:start-dfs.sh
    				Yarn: start-yarn.sh
    				统一的:start-all.sh 
    				
    				Web Console访问:hdfs: 端口: 50070
    								 yarn: 端口:8088
    				http://192.168.16.140:50070/
    				http://192.168.16.140:8088/
    				
    				root@ubuntu:~# start-all.sh
    				This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
    				Starting namenodes on [192.168.16.140]
    				root@192.168.16.140's password: 
    				192.168.16.140: starting namenode, logging to /training/hadoop-2.7.3/logs/hadoop-root-namenode-ubuntu.out
    				root@localhost's password: 
    				localhost: starting datanode, logging to /training/hadoop-2.7.3/logs/hadoop-root-datanode-ubuntu.out
    				Starting secondary namenodes [0.0.0.0]
    				root@0.0.0.0's password: 
    				0.0.0.0: starting secondarynamenode, logging to /training/hadoop-2.7.3/logs/hadoop-root-secondarynamenode-ubuntu.out
    				starting yarn daemons
    				starting resourcemanager, logging to /training/hadoop-2.7.3/logs/yarn-root-resourcemanager-ubuntu.out
    				root@localhost's password: 
    				localhost: starting nodemanager, logging to /training/hadoop-2.7.3/logs/yarn-root-nodemanager-ubuntu.out
    				root@ubuntu:~# jps
    				7574 Jps
    				7527 NodeManager
    				6616 DataNode
    				6953 SecondaryNameNode
    				6378 NameNode
    				7115 ResourceManager
    				root@ubuntu:~# 														
    																
    			虚拟机BigData_HDFS的快照1											
    		免密码登录的原理和配置	
    			对称加密
    				加密解密是同一个文件
    			不对称加密
    				一把钥匙一把锁
    				公钥:锁-->加密
    				私钥:钥匙-->解密
    				步骤:
    				1.生成密钥对,生成在当前用户的家目录的隐藏目录
    					ssh-keygen -t rsa  # -t 生成密钥对(公钥私钥)的算法
    						.ssh/id_rsa
    						.ssh/id_rsa.pub	
    						
    					root@ubuntu:~# ssh 192.168.16.140
    					root@192.168.16.140's password: 
    					Welcome to Ubuntu 12.04.5 LTS (GNU/Linux 3.13.0-32-generic x86_64)
    
    					 * Documentation:  https://help.ubuntu.com/
    
    					333 packages can be updated.
    					274 updates are security updates.
    
    					New release '14.04.6 LTS' available.
    					Run 'do-release-upgrade' to upgrade to it.
    
    
    					Your Hardware Enablement Stack (HWE) is supported until April 2017.
    
    					Last login: Mon Mar  2 22:15:27 2020 from 192.168.16.1
    					root@ubuntu:~# ssh-keygen -t rsa
    					Generating public/private rsa key pair.
    					Enter file in which to save the key (/root/.ssh/id_rsa): 
    					Enter passphrase (empty for no passphrase): 
    					Enter same passphrase again: 
    					Your identification has been saved in /root/.ssh/id_rsa.
    					Your public key has been saved in /root/.ssh/id_rsa.pub.
    					The key fingerprint is:
    					66:db:7d:4b:57:b6:24:37:5b:e7:fd:ec:68:be:1e:78 root@ubuntu
    					The key's randomart image is:
    					+--[ RSA 2048]----+
    					|                 |
    					|                 |
    					|                 |
    					|                 |
    					|        S    . +=|
    					|       o o . .+oO|
    					|        . . o Eo+|
    					|             +.*.|
    					|             +*o+|
    					+-----------------+
    
    				2.把公钥给server B	
    					ssh-copy-id -i .ssh/id_rsa.pub root@192.168.16.140  #把.ssh/id_rsa.pub 给192.168.16.140的root用户
    				3.收到A发来的公钥,保存到.ssh/authorized_keys
    					ls .ssh/
    					authorized_keys
    					
    					root@ubuntu:~# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.16.140
    					root@192.168.16.140's password: 
    					Now try logging into the machine, with "ssh 'root@192.168.16.140'", and check in:
    
    					  ~/.ssh/authorized_keys
    
    					to make sure we haven't added extra keys that you weren't expecting.
    
    					root@ubuntu:~# ls .ssh/
    					authorized_keys  id_rsa  id_rsa.pub  known_hosts						
    					
    				4.前面是配置后面是认证
    					server B随机产生明文字符串:hello
    				5.使用A的公钥进行加密:*****,并发送给A	
    				6.收到B发送的加密字符串,使用自己的私钥进行解密:hello
    				7.把解密后的字符串发送给server B进行认证
    				8.收到A解密的字符串hello
    				9.与4步的随机产生字符串对比,一样则直接登录,不一样输入密码
    				server A										server B																		
    					1.生成密钥对																														
    					2.把公钥给server B--->																														
    																3.收到A发来的公钥,保存到.ssh/authorized_keys
    																4.随机产生明文字符串:hello																				
    															<---5.使用A的公钥进行加密:*****,并发送给A																					
    					6.收到B的加密字符串,使用自己的私钥解密																															
    					7.把解密后的字符串发送给server B--->																															
    																8.收到A解密的字符串hello
    																9.与4步的随机产生字符串对比																		
    		hdfs测试MapReduce程序																																		
    			hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /input/data.txt /output/day03032241/wc #hdfs测试MapReduce程序																																
    				/output/day03032241/wc 目录不能事先存在																															
    			看输出结果:
    				hdfs dfs -ls /output/day03032241/wc
    																																				
    				root@ubuntu:/training/hadoop-2.7.3/share/hadoop/mapreduce# hdfs dfs -ls /output/day03032241/wc #看输出结果
    				Found 2 items
    				-rw-r--r--   1 root supergroup          0 2020-03-02 22:44 /output/day03032241/wc/_SUCCESS
    				-rw-r--r--   1 root supergroup         62 2020-03-02 22:44 /output/day03032241/wc/part-r-00000																																
    																																				
    				part的完全partition分区,一个分区对应一个输出文件																										
    				root@ubuntu:/training/hadoop-2.7.3/share/hadoop/mapreduce# hdfs dfs -cat /output/day03032241/wc/part-r-00000
    				BeiJing 2
    				China   2
    				I       2
    				capital 1
    				is      1
    				lova    1
    				love    1
    				of      1
    				the     1																											
    	3.全分布模式:真正用于生产的环境																															
    		课程所有的组从结构
    			HSFS
    				NameNode #主节点
    					DataNode #从节点
    					DataNode #从节点
    			Yarn
    				ResourceManager #主节点
    					NodeManager #从节点
    					NodeManager #从节点
    			Hbase
    			Strorm
    			Spark
    		单点故障是主节点故障,使用ZooKeep解决	
    

    start-all.sh
    root@ubuntu:~# start-all.sh
    This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
    Starting namenodes on [192.168.16.140]
    192.168.16.140: starting namenode, logging to /training/hadoop-2.7.3/logs/hadoop-root-namenode-ubuntu.out
    localhost: starting datanode, logging to /training/hadoop-2.7.3/logs/hadoop-root-datanode-ubuntu.out
    Starting secondary namenodes [0.0.0.0]
    0.0.0.0: starting secondarynamenode, logging to /training/hadoop-2.7.3/logs/hadoop-root-secondarynamenode-ubuntu.out
    starting yarn daemons
    starting resourcemanager, logging to /training/hadoop-2.7.3/logs/yarn-root-resourcemanager-ubuntu.out
    localhost: starting nodemanager, logging to /training/hadoop-2.7.3/logs/yarn-root-nodemanager-ubuntu.out
    root@ubuntu:~#

    root@ubuntu:~# jps
    3793 NameNode
    4372 SecondaryNameNode
    4535 ResourceManager
    4776 NodeManager
    5388 Jps
    4029 DataNode
    root@ubuntu:~# 				
    

    HDFS的体系架构
    NameNode
    职责:cd /training/tmp/dfs/
    data对应DataNode
    name对应NameNode
    nameSecondary对应SecondaryNameNode

    	192.168.157.112 bigdata112	NameNode SecondaryNameNode
    	192.168.157.113 bigdata113	DataNode NameNode
    	192.168.157.114 bigdata114	
    	
    	管理和维护HDFS的日志和元信息																															
    		/training/hadoop-2.7.3/tmp/dfs/data/current																														
    DataNode																															
    	职责:按照数据块保存数据库																														
    		/training/hadoop-2.7.3/tmp/dfs/data/current/BP-419062579-192.168.157.111-1535553141546/current/finalized/subdir0/subdir0																													
    SecondaryNameNode																															
    	职责:进行日志信息的合并																														
    

    操作HDFS
    日志很重要
    /training/hadoop-2.7.3/logs
    Web Console:端口 50070
    普通操作命令
    hdfs dfs -mkdir
    hdfs dfs -ls -R 查看目录和子目录,另一种写法:-lsr
    上传数据
    -put
    -copyFromLocal
    -moveFromLocal: 相当于ctrl+X(剪切)
    下载数据
    -get
    -copyToLocal
    删除
    -rm
    -rmr /output #表示删除目录和子目录

    HDFS的管理命令
    	hdfs dfsadmin -report #打印报告																															
    	hdfs dfsadmin -safemode get #安全模式状态,正常是关闭																														
    

    root@ubuntu:/training/hadoop-2.7.3/share/hadoop/mapreduce# hadoop jar hadoop-mapreduce-examples-2.7.3.jar
    An example program must be given as the first argument.
    Valid program names are:
    aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files.
    aggregatewordhist: An Aggregate based map/reduce program that computes the histogram of the words in the input files.
    bbp: A map/reduce program that uses Bailey-Borwein-Plouffe to compute exact digits of Pi.
    dbcount: An example job that count the pageview counts from a database.
    distbbp: A map/reduce program that uses a BBP-type formula to compute exact bits of Pi.
    grep: A map/reduce program that counts the matches of a regex in the input.
    join: A job that effects a join over sorted, equally partitioned datasets
    multifilewc: A job that counts words from several files.
    pentomino: A map/reduce tile laying program to find solutions to pentomino problems.
    pi: A map/reduce program that estimates Pi using a quasi-Monte Carlo method.
    randomtextwriter: A map/reduce program that writes 10GB of random textual data per node.
    randomwriter: A map/reduce program that writes 10GB of random data per node.
    secondarysort: An example defining a secondary sort to the reduce.
    sort: A map/reduce program that sorts the data written by the random writer.
    sudoku: A sudoku solver.
    teragen: Generate data for the terasort
    terasort: Run the terasort
    teravalidate: Checking results of terasort
    wordcount: A map/reduce program that counts the words in the input files.
    wordmean: A map/reduce program that counts the average length of the words in the input files.
    wordmedian: A map/reduce program that counts the median length of the words in the input files.
    wordstandarddeviation: A map/reduce program that counts the standard deviation of the length of the words in the input files.

    =============================================================================================

    分析WordCount数据处理的过程
    Yarn调度MapReduce任务的过程
    代理对象
    如果一个类的名字前面$,表示这是一个代理对象
    是一种包装设计模式
    可以增强类的功能
    场景
    数据库连接池
    拦截器
    步骤
    需要实现跟真正对象相同的接口
    对于感兴趣的方法进行重写
    对于不感兴趣的方法直接调用真正的对象来完成
    序列化
    把这个对象保存到文件中
    OutputStream out = new FileOutputStream("d: empstudent.ooo");
    ObjectOutputStream oos = new ObjectOutputStream(out);
    MapReduce的序列化:核心接口:Writable
    如果一个类实现了Writable接口,该类的对象可以作为key和value
    举例1:读取员工数据,生成员工的对象,直接输出到HDFS

    ==================================================================================
    ****MR编程模型
    (G:潭州教育(已更新完毕)003.大数据课程大数据001.大数据课程概述与大数据背景知识课程视频2-09-MR编程模型.mp4)
    03-13_18-24-23-009
    map 输入 k1
    v1

    	输出	k2	
    			v2	
    				// k2 == k3 ,v2和v3数据类型一致,v3是一个集合,集合中的每一个元素都是k2
    

    reduce 输入 k3
    v3

    	输出	k4	
    			v4	
    

    所有的数据类型必须是hadoop数据类型
    int IntWritable
    long LongWritable
    String Text
    null NullWritable
    /////////////////////////////////////////////////////////////////////////
    大数据
    体系架构原理
    终极目标:使用SQL分析大数据
    Hive:使用SQL转化成MapReduce
    HBase:基于HDFS之上的NoSQL数据库
    Apache Storm:进行实时计算(流式计算)

    ===================================================================================
    ****分析WordCount数据处理的过程
    (G:潭州教育(已更新完毕)003.大数据课程大数据006.HDFS的底层原理:代理对象和RPC课程视频)

    map 输入 k1 该行数据的偏移量(LongWritable)
    v1 读入的单词(Text)
    //分词
    输出 k2 单词(Text)
    v2 每个单词记一(IntWritable)
    //k2 == k3 ,v2和v3数据类型一致,v3是一个集合,集合中的每一个元素都是k2
    //map的输出就是reduce的输入,相同的k2会被同一个reduce处理
    reduce 输入 k3 I Beijing capital (Text)
    v3 (1,1) (1,1) (1) (IntWritable)
    //这种逻辑实际是实现了sql中的group by和distinct,Hive是sql到map-reduce的映射器
    //reduce对v3进行求和,得到了单词出现的频率
    输出 k4 I Beijing capital (Text)
    v4 2 2 1 (IntWritable)
    所有的数据类型必须是hadoop数据类型
    int IntWritable
    long LongWritable
    String Text
    null NullWritable

    I love Beijing
    I love China
    Beijing is the capital of China

    ****Ubuntu安装MySQL
    sudo apt-get install mysql-server
    sudo apt-get install mysql-client
    sudo apt-get install libmysqlclient-dev
    测试数据库,输入mysql -u root -p ,密码czl

    ****MRunit的使用
    1. jar包buildpath
    E:local_repositoryczlBigDataMRUnit
    2. 源码在文件夹wordcount

    ****MapReduce编程案例:求部门的工资总额
    7369,SMITH,CLERK,7902,1980/12/17,800,0,20
    7499,ALLEN,SALESMAN,7698,1981/2/20,1600,300,30
    7521,WARD,SALESMAN,7698,1981/2/22,1250,500,30
    7566,JONES,MANAGER,7839,1981/4/2,2975,0,20
    7654,MARTIN,SALESMAN,7698,1981/9/28,1250,1400,30
    7698,BLAKE,MANAGER,7839,1981/5/1,2850,0,30
    7782,CLARK,MANAGER,7839,1981/6/9,2450,0,10
    7788,SCOTT,ANALYST,7566,1987/4/19,3000,0,20
    7839,KING,PRESIDENT,-1,1981/11/17,5000,0,10
    7844,TURNER,SALESMAN,7698,1981/9/8,1500,0,30
    7876,ADAMS,CLERK,7788,1987/5/23,1100,0,20
    7900,JAMES,CLERK,7698,1981/12/3,950,0,30
    7902,FORD,ANALYST,7566,1981/12/3,3000,0,20
    7934,MILLER,CLERK,7782,1982/1/23,1300,0,10

    员工号 员工姓名 职位 老板员工号 入职日期 月薪 奖金 部门号

    k1 k2 k3 k4
    偏移量 部门号 相同的k2,他们的v2会被同一个reduce处理 10 对v3求和 部门号10
    ---> -----------------------------------------------> ------------------>
    v1 v2 相当于一次group by ,distinct v3 v4
    数据 员工工资 (1450,5000,1300) 工资总额1450+5000+1300

    k1 LongWritable
    v1 Text
    k2v2k3v3k4v4 IntWritable

    SQL:select deptno,sum(sal) from emp group by deptno;

    [root@192 mapreduce]# pwd
    /root/training/hadoop-2.7.3/share/hadoop/mapreduce
    [root@192 mapreduce]# hadoop jar hadoop-mapreduce-examples-2.7.3.jar #查看jar包

    [root@192 input]# pwd
    /root/Documents/input
    [root@192 input]# hdfs dfs -ls /input
    Found 3 items
    -rw-r--r-- 1 root supergroup 59 2020-03-10 06:39 /input/data.txt
    -rw-r--r-- 1 root supergroup 84 2020-03-10 07:25 /input/dept.csv
    -rw-r--r-- 1 root supergroup 636 2020-03-10 07:25 /input/emp.csv

    [root@192 input]# hdfs dfs -rm -r /output/0910

    root@ubuntu:/home/czl/Documents/input# pwd
    /home/czl/Documents/input

    root@ubuntu:~/training/hadoop-2.7.3/share/hadoop/mapreduce# hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /home/czl/Documents/input/data.txt /home/czl/Documents/output/0310/wc

    root@ubuntu:~/training/hadoop-2.7.3/share/hadoop/mapreduce# more /home/czl/Documents/output/0310/wc/part-r-00000

    [root@localhost input]# hdfs dfs -put emp.csv /input
    [root@localhost input]# hdfs dfs -ls /input
    [root@localhost input]# hadoop jar partition.jar /input/emp.csv /output/day0309
    [root@localhost input]# hdfs dfs -ls /output/day0309
    Found 4 items
    -rw-r--r-- 1 root supergroup 0 2020-03-18 22:49 /output/day0309/_SUCCESS
    -rw-r--r-- 1 root supergroup 324 2020-03-18 22:49 /output/day0309/part-r-00000
    -rw-r--r-- 1 root supergroup 162 2020-03-18 22:49 /output/day0309/part-r-00001
    -rw-r--r-- 1 root supergroup 268 2020-03-18 22:49 /output/day0309/part-r-00002
    [root@localhost input]# hdfs dfs -cat /output/day0309/part-r-00000

    ****HBase数据库
    基于HDFS之上的NoSQL数据库
    HBase HDFS
    表 ----> 目录
    数据 ----> 文件(HFile,默认大小:128M)
    BigData的环境变量
    /etc/profile
    RedHat环境变量
    /root/.bash_profile
    BigData_HDFS的环境变量
    /etc/profile
    source 使生效
    启动HBase: start-hbase.sh ----> 只会启动HMaster
    stop-hbase.sh
    root@ubuntu:~# jps
    4208 Jps
    3952 HMaster
    本地模式HBase数据保存的目录file:///root/training/hbase-1.3.1/data
    root@ubuntu:~# hbase shell
    create 'student','info','grade'
    put 'student','stu001','info:name','Tom'
    put 'student','stu001','info:age','24'
    put 'student','stu001','grade:math','80'
    put 'student','stu002','info:name','Mary'
    scan 'student'
    ROW COLUMN+CELL
    stu001 column=grade:math, timestamp=1584699090567, value=80
    stu001 column=info:age, timestamp=1584699042435, value=24
    stu001 column=info:name, timestamp=1584698849997, value=Tom
    stu002 column=info:name, timestamp=1584699144995, value=Mary

    ZooInspector客户端的使用
    

    ubuntu关机
    shutdown -h now
    安全模式
    hdfs dfsadmin -safemode get

    *****HBase基本概念与基本使用
    HBase的存储机制
    HBase是一个面向列的数据库,在表中它由行排序。表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续存储在磁盘上。表中的每个单元格值都具有时间戳。

    	表是行的集合。
    	行是列族的集合。
    	列族是列的集合。
    	列是键值对的集合。
    与nosql数据库一样,row key是用来表示唯一一行记录的主键,HBase的数据时按照RowKey的字典顺序进行全局排序的,所有的查询都只能依赖于这一个排序维度。
    
    HRegionServer管理一系列HRegion对象;
    每个HRegion对应Table中一个Region,HRegion由多个HStore组成;
    每个HStore对应Table中一个Column Family的存储;
    

    https://www.cnblogs.com/swordfall/p/8737328.html
    https://www.sohu.com/a/284131722_100270933
    查看hbase状态 status
    创建表 create '表名','列族名1','列族名2','列族名N'
    查看所有表 list
    描述表 describe '表名'
    判断表存在 exists '表名'
    判断是否禁用启用表
    is_enabled '表名'
    is_disabled '表名'

    添加记录 put '表名','rowkey','列族:列','值'
    查看记录rowkey下的所有数据 get '表名','rowkey'
    查看所有记录 scan '表名'
    查看表中的记录总数 count '表名'
    获取某个列族 get '表名','rowkey','列族:列'
    获取某个列族的某个列 get '表名','rowkey','列族:列'
    删除记录 delete '表名','行名','列族:列'
    删除整行 deleteall '表名','rowkey'
    删除一张表
    先要屏蔽该表,才能对该表进行删除
    第一步 disable '表名',第二步 drop '表名'

    清空表 truncate '表名'
    查看某个表某个列中所有数据 scan '表名',{COLUMNS=>'列族名:列名'}

    ****ubunru安装mysql
    apt update
    apt-get install mysql-server
    apt-get install libmysqld-dev

    启动和关闭mysql服务器:
    $ service mysql start
    $ service mysql stop
    重启MySQL服务。service mysql restart

    sudo netstat -tap | grep mysql #确认是否启动成功,mysql节点处于LISTEN状态表示启动成功
    tcp 0 0 localhost:mysql : LISTEN 3237/mysqld

    进入mysql shell界面:
    $ mysql -u root -p
    BigData_HDFS 的mysql的root密码czl
    登陆MySQL,并查看MySQL目前设置的编码。show variables like "char%";
    可以单个设置修改编码方式set character_set_server=utf8;但是重启会失效,

    使用Navicat Premium远程连接ubuntu系统上mysql数据库

    ===================================================================================
    ****ubuntu server设置时区和更新时间

    beachboyy@ubuntu:~$ date -R
    beachboyy@ubuntu:~$ sudo tzselect

    复制文件到/etc目录下
    sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    更新时间
    sudo ntpdate time.windows.com






  • 相关阅读:
    Leetcode: Palindrome Permutation
    Leetcode: Ugly Number
    Leetcode: Ugly Number II
    Leetcode: Single Number III
    Leetcode: 3Sum Smaller
    Leetcode: Factor Combinations
    Leetcode: Different Ways to Add Parentheses
    Leetcode: Add Digits
    GigE IP地址配置
    Ubuntu 关闭触摸板
  • 原文地址:https://www.cnblogs.com/RoyalGuardsTomCat/p/14353670.html
Copyright © 2020-2023  润新知