Hadoop數據分析平臺項目實戰(基於CDH版本集羣部署與安裝)

一、Hadoop的主要應用場景:
  a、數據分析平臺。
  b、推薦系統。
  c、業務系統的底層存儲系統。
  d、業務監控系統。html

二、開發環境:Linux集羣(Centos64位)+Window開發模式(window10,64位操做系統)。
   使用技術:hadoop,hbase,hive,flume,oozie,sqoop,nginx,tomcat,spring,mybatis,springmvc,mysql等等。Hdfs爲海量的數據提供存儲,MapReduce爲海量的數據提供計算。
     此項目使用CDH(Cloudera Distribution Hadoop)版本,是Cloudera公司對其商業化改進和更新,CDH官網:http://cloudera.com

三、開發版本:java

  a、hadoop2.5.0-cdh5.3.6版本;node

  (以前cdh版本下載地址:http://archive.cloudera.com/cdh5/cdh/5/或者http://archive.cloudera.com/cdh4/cdh/4/),cdh版本的文檔:http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.5.0-cdh5.3.6/mysql

  若是是在apache的官網下載以前的版本,地址以下所示:http://archive.apache.org/dist/hadoop/common/,文檔查看如:http://hadoop.apache.org/docs/
linux

  b、hbase-0.98.6-cdh5.3.6版本。nginx

  c、zookeeper-3.4.5-cdh5.3.6版本。web

四、Hadoop集羣分佈式(徹底分佈式模式)環境搭建:spring

安裝步驟: a、建立用戶,使用hadoop用戶,注意本身配置好本身的網絡,這點很重要。 步驟(注意root用戶密碼): 1)、使用useradd hadoop添加用戶。 2)、使用passwd hadoop設置用戶密碼,密碼爲hadoop; 3)、給用戶賦予使用sudo命令的權限。 4)、chmod u+w /etc/sudoers。 5)、vim /etc/sudoers。因爲root用戶對此文件也沒有修改權限,因此先賦予權限,修改完畢再刪除權限。 6)、在root ALL=(ALL)ALL下面加上一行以下所示: hadoop ALL=(ALL)ALL。注意,分隔的是製表符。 7)、chmod u-w /etc/sudoers。 b、修改主機名以及ssh免密碼登錄。 注意:因爲之後操做都是使用hadoop用戶,因此必須使用hadoop用戶登錄進行免密碼配置,可是使用root還不是免密碼登錄的。 步驟(使用hadoop用戶登錄): 1)、使用sudo hostname slaver1修改主機名,當前生效,重啓後失效。 2)、使用sudo vim /etc/sysconfig/network修改主機名,重啓生效。 3)、在sudo vim /etc/hosts文件中添加主機名稱對應的ip地址。 注意,將其餘集羣的主機名稱和對應的Ip地址都添加到三臺機器,否則沒法ping通。 192.168.19.131 slaver1 192.168.19.132 slaver2 192.168.19.133 slaver3 4)、使用ssh-keygen -t rsa生成ssh密鑰。 注意:普通用戶生成的密鑰對是在~/.ssh目錄下面,root用戶是在/root/.ssh目錄下面,必定區分清楚。 5)、進入.ssh文件夾,建立authorized_keys文件,而且將id_rsa.pub的內容添加到文件中去,修改文件權限爲600(必須) 注意:普通用戶是在~/.ssh目錄下。root用戶是在/root/.ssh目錄下面。 [hadoop@slaver1 .ssh]$ scp authorized_keys slaver2:~/.ssh/ [hadoop@slaver1 .ssh]$ scp authorized_keys slaver3:~/.ssh/
            6)、ssh slaver1驗證是否配置免密碼登錄成功。 ssh slaver2 ssh slaver3 c、jdk的安裝。 1)、複製jdk的tar壓縮包到/home/hadoop/package文件夾中。 2)、解壓縮操做: [hadoop@slaver1 package]$ tar -zxvf jdk-7u79-linux-x64.tar.gz -C /home/hadoop/soft/
        3)、建立軟鏈接(可建立或者不建立,建立軟鏈接,方便記憶): [hadoop@slaver1 package]$ sudo ln -s /home/hadoop/soft/jdk1.7.0_79/ /usr/local/jdk 4)、配置相關的環境變量: 針對用戶生效:[hadoop@slaver1 package]$ vim ~/.bash_profile 全局生效(此處使用這個):[hadoop@slaver1 package]$ sudo vim /etc/profile 在文件最下面添加以下所示內容: export JAVA_HOME=/home/hadoop/soft/jdk1.7.0_79 export PATH=$PATH:$JAVA_HOME/bin 5)、保存文件,使環境變量生效: [hadoop@slaver1 package]$ source /etc/profile 6)、驗證jdk是否安裝成功: [hadoop@slaver1 package]$ java [hadoop@slaver1 package]$ javac [hadoop@slaver1 package]$ java -version [hadoop@slaver1 package]$ javac -version d、hadoop的安裝。 步驟: 1)、下載hadoop安裝包並複製到/home/hadoop/package文件夾中。 2)、解壓縮操做。並建立數據保存文件hdfs。 [hadoop@slaver1 package]$ tar -zxvf hadoop-2.5.0-cdh5.3.6.tar.gz -C /home/hadoop/soft/ [hadoop@slaver1 hadoop-2.5.0-cdh5.3.6]$ mkdir hdfs 3)、配置hadoop-env.sh,mapred-env.sh,yarn-env.sh文件。 hadoop-env.sh文件修改以下所示: export JAVA_HOME=/home/hadoop/soft/jdk1.7.0_79 徹底分佈式須要指定hadoop的pid路徑: export HADOOP_PID_DIR=/home/hadoop/soft/hadoop-2.5.0-cdh5.3.6/hdfs/tmp yarn-env.sh文件修改以下所示: export JAVA_HOME=/home/hadoop/soft/jdk1.7.0_79 因爲沒有默認的,因此手動建立: export YARN_PID_DIR=export HADOOP_MAPRED_PID_DIR=/home/hadoop/soft/hadoop-2.5.0-cdh5.3.6/hdfs/tmp mapred-env.sh。 export HADOOP_MAPRED_PID_DIR=/home/hadoop/soft/hadoop-2.5.0-cdh5.3.6/hdfs/tmp 4)、配置基本環境變量core-site.xml文件。 <configuration>
                <!-- 指定HADOOP所使用的文件系統schema(URI),HDFS的老大(NameNode)的地址,master便是namenode所在的節點機器,9000是端口號,NameNode是爲客戶提供服務的,NameNode知道每個文件存在哪個datanode上面 -->
                        <property>
                                <name>fs.defaultFS</name>
                                <value>hdfs://slaver1:9000</value>
                                <--<value>hdfs://slaver1:8020</value>-->
                        </property>
                        <!-- 指定hadoop運行時產生文件的存儲目錄 -->
                        <property>
                                <name>hadoop.tmp.dir</name>
                                <value>/home/hadoop/soft/hadoop-2.5.0-cdh5.3.6/hdfs/tmp</value>
                        </property>
                </configuration>
            5)、配置hdfs相關變量hdfs-site.xml文件。 <configuration>
                    <!-- 指定HDFS副本的數量,副本的數量,避免一個機器宕掉了,數據丟失,默認是3個副本 -->
                    <property>
                        <name>dfs.replication</name>
                        <value>2</value>
                    </property>
                    <property>
                        <name>dfs.namenode.name.dir</name>
                        <value>/home/hadoop/soft/hadoop-2.5.0-cdh5.3.6/hdfs/name</value>
                    </property>
                    <property>
                    <name>dfs.namenode.data.dir</name>
                    <value>/home/hadoop/soft/hadoop-2.5.0-cdh5.3.6/hdfs/data</value>
                    </property>
                    <!-- 指定SecondNameNode在那臺機器上面啓動 -->
                    <property>
                        <name>dfs.secondary.http.address</name>
                        <value>slaver1:50090</value>
                    </property>
                </configuration>

            6)、配置mapred相關環境變量mapred-site.xml文件。 複製操做: [hadoop@slaver1 hadoop]$ cp mapred-site.xml.template mapred-site.xml; 修改內容以下所示: <configuration>
                    <!-- 指定mr運行在yarn上,即mapreduce運行在yarn上面 -->
                        <property>
                             <name>mapreduce.framework.name</name>
                             <value>yarn</value>
                        </property>

                    </configuration>    
            7)、配置yarn相關環境變量yarn-site.xml文件。 <configuration>
                    <!-- Site specific YARN configuration properties -->
                    <!-- 指定YARN的老大(ResourceManager)的地址,這個地方主要看本身的機器分配狀況,若是是四臺機器,這個value值就>是第四臺的主機名稱哦, -->
                    <property>
                        <name>yarn.resourcemanager.hostname</name>
                        <value>slaver1</value>
                    </property>
                    <!-- reducer獲取數據的方式 -->
                    <property>
                        <name>yarn.nodemanager.aux-services</name>
                        <value>mapreduce_shuffle</value>
                    </property>
                </configuration>

            8)、配置datanode相關變量slaves文件。 slaver2 slaver3 9)、配置hadoop相關環境變量。 export JAVA_HOME=/home/hadoop/soft/jdk1.7.0_79 export HADOOP_HOME=/home/hadoop/soft/hadoop-2.5.0-cdh5.3.6 export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 刷新配置文件: [hadoop@slaver1 hadoop]$ source /etc/profile 驗證是否配置成功: [hadoop@slaver1 hadoop]$ hadoop version 10)、將slaver1機器上面的hadoop複製到slaver2機器和slaver3機器: [hadoop@slaver1 soft]$ scp -r hadoop-2.5.0-cdh5.3.6/ slaver2:/home/hadoop/soft/ [hadoop@slaver1 soft]$ scp -r hadoop-2.5.0-cdh5.3.6/ slaver3:/home/hadoop/soft/
            11)、hadoop的啓動步驟: a、第一次啓動hadoop以前須要格式化namenode節點,命令爲hadoop namenode -format: [hadoop@slaver1 soft]$ hadoop namenode -format b、兩個方式啓動start-all.sh或者start-dfs.sh,start-yarn.sh。 [hadoop@slaver1 soft]$ start-all.sh 或者: [hadoop@slaver1 soft]$ start-dfs.sh [hadoop@slaver1 soft]$ start-yarn.sh c、查看是否啓動成功。 注意:啓動過程當中出現slaver1主節點的ResourceManager未啓動異常狀況,解決方法是在yarn-site.xml文件中修改以下所示,注意,slaver1是主節點的主機名稱: <property>
                            <name>yarn.resourcemanager.hostname</name>
                            <value>slaver1</value>
                        </property> 驗證以下所示,而後查看節點的啓動狀況,經過jps命令查看hadoop的進程是否啓動: [hadoop@slaver1 hadoop]$ jps [hadoop@slaver2 hadoop]$ jps [hadoop@slaver3 hadoop]$ jps 網頁查看以下所示,查看web界面是否顯示正常信息內容: 查看分佈式文件系統,http://slaver1:50070/
                        查看MapReduce,http://slaver1:8088/
            驗證hadoop對應的yarn(mapreduce)框架是否啓動成功,直接運行hadoop自帶的example程序便可;
              [hadoop@slaver1 hadoop]$ echo "i like learn bigdata!" >> /home/hadoop/data_hadoop/test.txt
              [hadoop@slaver1 hadoop]$ hadoop dfs -put /home/hadoop/data_hadoop/test.txt /
              [hadoop@slaver1 hadoop]$ hadoop dfs -ls /
              [hadoop@slaver1 mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /test.txt /output
              注意:若是上面執行失敗或者卡着不動,檢查是不是進程宕掉了。
              [hadoop@slaver1 mapreduce]$ hadoop fs -cat /user/hadoop/output/part-r-00000查看統計的內容;

 五、Hadoop Shell命令簡單描述:sql

hadoop的shell命令主要分爲兩類,一類是啓動命令,一類是控制和操做命令(hdfs/mapred/yarn)。其中啓動命令位於sbin目錄下面,控制和操做命令主要位於bin目錄下面。其實最終的啓動命令也是調用控制命令來進行集羣服務的啓動,區別在於啓動命令中須要使用ssh的相關命令來控制其餘機器啓動服務,而控制和操做命令主要是直接調用hadoop提供的服務類接口。 1)、查看hdfs能夠跟的命令,查看hadoop能夠跟的命令: [hadoop@slaver1 mapreduce]$ hdfs [hadoop@slaver1 mapreduce]$ hadoop 2)、hdfs命令(hdfs dfs),和hadoop命令,顯示文件夾的內容: [hadoop@slaver1 mapreduce]$ hadoop fs -ls / 若是遞歸顯示文件夾的內容以下所示-lsr是遞歸顯示: [hadoop@slaver1 mapreduce]$ hadoop fs -lsr / [hadoop@slaver1 mapreduce]$ hdfs dfs -ls / 若是遞歸顯示文件夾的內容以下所示-lsr是遞歸顯示: [hadoop@slaver1 mapreduce]$ hdfs dfs -ls -R / [hadoop@slaver1 mapreduce]$ hdfs dfs -lsr /    
3)、hdfs命令查看命令幫助: [hadoop@slaver1 mapreduce]$ hdfs dfs -help ls 4)、hdfs命令,建立文件夾: [hadoop@slaver1 mapreduce]$ hdfs dfs -mkdir -p /201804/20180405
    -p參數指定當須要建立文件夾存儲,那麼不報錯,默認狀況會報錯。另一個做用就是遞歸建立文件夾。若是咱們給定的路徑不是以/開始的,那麼表示在當前用戶目錄下建立文件夾。(默認狀況下是沒有當前用戶目錄的,那麼就會報錯) 5)、hdfs命令,上傳文件到HDFS。-put,-copyFromLocal,-moveFromLocal。 [hadoop@slaver1 data_hadoop]$ hdfs dfs -put test.txt /201804/20180405 本地路徑能夠指定文件夾或者多個文件,hdfs上的路徑必須是根據上傳東西的不一樣,有不一樣的要求: a、本地指定的是文件夾,那麼hdfs若是目錄不存在,就新建目錄而後將本地文件夾內容copy過去。hdfs目錄存在,則將文件夾copy過去。 b、本地指定的是單個文件,那麼要求hdfs上指定的文件不存在。 c、本地指定的多個文件,那麼要求hdfs上指定的文件夾存在。 6)、hdfs命令,下載文件。-get,-copyToLocal,-moveToLocal。 [hadoop@slaver1 data_hadoop]$ hdfs dfs -get /201804
7)、hdfs命令,查看文件內容: [hadoop@slaver1 data_hadoop]$ hdfs dfs -cat /test.txt [hadoop@slaver1 data_hadoop]$ hdfs dfs -text /test.txt cat命令和text命令均可以查看文件內容,可是他們的內置機制不同,cat是copy文件內容,而後顯示。text是經過hadoop解析將文件內容轉換爲文本內容,而後再顯示。cat命令只適合看一半的文本文件,而text命令能夠看出全部文件。 8)、hdfs命令刪除文件。 [hadoop@slaver1 data_hadoop]$ hdfs dfs -rm -R /201804 [hadoop@slaver1 data_hadoop]$ hdfs dfs -rmdir /201804/20180405 區別:rm和rmdir的區別主要是,rm能夠刪除任何文件/文件夾。rmdir只能刪除空的文件夾。 9)、hdfs命令,fsck命令。 fsck命令是檢測hdfs磁盤文件是否有丟失備份異常等信息,能夠查看到具體的文件是否處於健康狀況,執行命令爲hdfs -fsck 文件路徑。 [hadoop@slaver1 data_hadoop]$ hdfs fsck /201804 [hadoop@slaver1 data_hadoop]$ hdfs fsck -help 10)、hdfs命令,dfsadmin命令彙報集羣信息。 a、參數-report 能夠經過該命令查看集羣的基本信息,包括總磁盤大小,剩餘磁盤大小,丟失塊個數等總的集羣信息。 [hadoop@slaver1 data_hadoop]$ hdfs dfsadmin -report b、參數-safemode<enter | leave | get | wait> 當集羣中的文件備份出現丟失的時候,可能會進行安全模式。安全模式是指當集羣處於該狀態下,hdfs解決文件IO操做。咱們能夠經過該命令強制離開安全模式。 [hadoop@slaver1 data_hadoop]$ hdfs dfsadmin -safemode get
11)、hdfs命令,-namenode命令 namenode命令是hadoop提供的操做NN節點的shell命令入口,包括NN節點的格式化,NN節點升級,NN節點回滾,NN節點啓動等操做。查看幫助信息:hdfs namenode -h; [hadoop@slaver1 data_hadoop]$ hdfs namenode -h 12)、hadoop命令 hadoop命令主要是將hdfs,yarn,mapred所有命令進行一個整合,實際生活中通常狀況下主要使用hadoop命令來進行job的管理到多個集羣之間的數據複製文件。經常使用命令主要有: a、job,job聲明週期管理,包括提交,查看狀態,kill等等。 [hadoop@slaver1 data_hadoop]$ hadoop job 該命令主要是根據咱們控制job聲明週期的接口。咱們能夠經過該命令提交job,查看咱們提交job的運行狀況,殺死咱們提交的job,也能夠刪除job運行中的某個具體task; b、distcp,多集羣間數據複製。 c、version,查看hadoop版本信息。

 六、Hdfs結構介紹和YARN的介紹:shell

a、hdfs是hadoop提供的基於分佈式的文件存儲系統。全稱爲hadoop distributed file system。主要是由namenode,datanode兩類節點構成,其中namenode節點的主要功能是管理系統的元數據,負責管理文件系統的命令空間,記錄文件數據塊在datanode節點上面的位置和副本信息,協調客戶端對文件系統的訪問,以及記錄命名空間的改動和自己屬性的變更。datanode節點的主要功能就是負責節點所在物理節點上的存儲管理。
b、MapReduce(YARN)是hadoop提供的一種處理海量數據的並行編程模型和計算框架,用於對大規模的數據進行並行計算。主要由resourcemanager和nodemanager兩類節點構成。其中resourcemanager主要負責集羣資源管理,nodemanager負責節點的資源管理。初次以外,當運行mapreduce任務的時候,會產生ApplicationMaster和Container,其中ApplicationMaster負責向resourcemanager節點進行資源的申請並控制任務的執行,Container是最基本的資源單位。MapReduce的map和reduce均是其之上進行的。

 7:Hbase的鞏固與學習:

a、Hbase是創建在hdfs之上的一個提供可靠性,高性能,列存儲,可伸縮,實時讀寫的數據庫系統。是一種介於nosql和RDBMS之間的一種數據庫系統,僅支持經過rowkey和range進行數據的檢索,主要存儲非結構化數據和半結構化數據。Hbase的目標是經過橫向擴展,添加普通機器來增長存儲性能和計算性能。Hbase的特色,大(一個表能夠有上億行以及百萬級的行),面向列存儲,稀疏(因爲null不佔用存儲空間,全部表結構能夠設計的很是稀疏)
b、Hbase使用zookeeper進行集羣的節點管理,固然hbase自身集成了一個zk系統,不過通常狀況下在實際成產環境中不使用。Hbase由master,進程是hmaster和regionserver,進程是hregionserver兩類節點(若是使用hbase自帶的zk服務,那麼還有HQuorumPeer進程)。Hbase支持提供backup master進行master備份。其中節點負責和zk進行通訊以及存儲regionserver的相關位置信息,regionserver節點實現具體對數據的操做,最終數據存儲在hdfs上。
c、Hbase的安裝:
  1)、hbase存在三種安裝方式,一種是獨立模式,基本不用,第二種是分佈式模式(繼承zookeeper),第三種是分佈式模式(獨立zookeeper)。
2)、hbase的下載地址以下所示:http://archive.cloudera.com/cdh5/cdh/5/。
  3)、hbase的安裝參考以下所示:http://www.cnblogs.com/biehongli/p/7729135.html。
  4)、在hbase的根目錄下建立一個文件夾hbase來存儲臨時文件和pid等等。默認是tmp目錄。
5)、建立到hdfs-site.xml的軟鏈接或者配置鏈接hdfs的配置信息。而後將hbase的相關信息添加到環境變量中。
6)、能夠查看hbase是否安裝成功:[hadoop@slaver1 bin]$ hbase version。
7)、驗證hbase的三種方式:第一種,jps查看是否有Hbase的進程啓動,HMaster,HRegionServer。第二種,web界面查看是否啓動http://192.168.19.131:60010/。第三種,shell命令客戶端查看是否啓動成功。[hadoop@slaver1 conf]$ hbase shell
  8)、hbase shell的命令參數忘記,可使用以下查看:hbase(main):006:0> help 'status',hbase(main):009:0> help 'alter'等等
9)、hbase命名空間相關命令:命名空間的做用是相似關係型數據中的database,做用就是將hbase的表按照業務做用分隔開,有益於維護。Hbase默認有兩個命名空間,分別是hbase和default。其中hbase命名空間存儲hbase自身的表信息,default存儲用戶建立的表。
    命名:create_namespace(建立命名空間),alert_namespace(命名空間修改),describe_namespace(顯示命名空間描述信息),drop_namespace(刪除命名空間)。list_namespace(顯示全部命名空間),list_namespace_tables(顯示對於命名空間中的table名稱)。
d、zookeeper的安裝和部署:
  1)、將zookeeper-3.4.5-cdh5.3.6.tar.gz上傳到虛擬機,進行解壓縮操做,具體類比參考:http://www.cnblogs.com/biehongli/p/7650570.html
    也能夠在線下載,若是網絡能夠的話。命令以下所示:
    [hadoop@slaver1 script_hadoop]$ wget http://archive.cloudera.com/cdh5/cdh/5/zookeeper-3.4.5-cdh5.3.6.tar.gz
e、mapreduce與hbase的整合,搭建步驟:
  1)、在hadoop目錄中建立hbase-site.xml的軟鏈接。在真正的集羣環境中的時候,hadoop運行mapreduce會經過該文件查找具體的hbase環境信息。
    [hadoop@slaver1 ~]$ ln -s /home/hadoop/soft/hbase-0.98.6-cdh5.3.6/conf/hbase-site.xml /home/hadoop/soft/hadoop-2.5.0-cdh5.3.6/etc/hadoop/hbase-site.xml
  2)、將hbase須要的jar包添加到hadoop運行環境中,其中hbase須要的jar就是lib文件夾下面的全部*.jar文件。
    在hadoop中提娜佳其餘第三方的jar有不少方式,好比添加hbase的jar到hadoop環境中。這裏介紹三種:
    第一種:在hadoop-env.sh中添加HADOOP_CLASS環境變量,value爲hbase的lib文件夾下的全部jar文件。
      if [ "$HADOOP_CLASSPATH" ]; then
          export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/home/hadoop/soft/hbase-0.98.6-cdh5.3.6/lib/*
      else
         export HADOOP_CLASSPATH=/home/hadoop/soft/hbase-0.98.6-cdh5.3.6/lib/*
      fi
    第二種:在系統級或者用戶級修改*profile文件內容,在文件中添加HADOOP_CLASSPATH。
    第三種:直接將hbase的lib文件夾中全部jar文件複製到hadoop的share/hadoop/common/lib或者share/hadoop/mapreduce或者share/hadoop/marreudce2等文件夾中。
     
  3)、使用hbase自帶的server jar測試是否安裝成功。
    直接使用hbase自帶的命令進行環境的測試,命令爲:。該命令能夠查看咱們指定table的行數。
    [hadoop@slaver1 lib]$ cd /home/hadoop/soft/hbase-0.98.6-cdh5.3.6/lib
    [hadoop@slaver1 lib]$ hadoop jar hbase-server-0.98.6-cdh5.3.6.jar rowcounter student 

 八、Hive的學習與鞏固:

1、Hive是構建在hadoop之上的數據倉庫平臺,設計目標就是將hadoop上的數據操做同sql結合,讓熟悉sql編程的開發人員能輕鬆的向hadoop平臺上轉移。hive能夠在hdfs上構建數據倉庫存儲結構化數據,這些數據來源就是Hdfs上,Hive提供了一個相似sq的查詢語言Hivesql來進行查詢,變換數據等操做。固然hivesql語句的底層是轉換爲相應的mapreduce代碼進行執行的。
二、hive包含用戶接口,元數據庫,解析器,數據倉庫等組件組成,其中用戶接口包含shell客戶端,jdbc,odbc,web接口等等。元數據庫主要是指定義在hive中的表結構信息,通常保存到關係型數據庫中,默認是derby,通常使用mysql進行保存。解析器主要功能是將hql轉換爲mapreduce代碼。數據倉庫就是由hdfs組成的數據存儲容器。
三、hive根據metastore的存儲位置不一樣,分爲三種安裝模式,內嵌模式,本地模式,遠程模式。內嵌模式就是使用derdy存儲元數據。本地模式是將hive.metastore.local設置爲true,就是說metastore和hive客戶端安裝在同一臺機器上。遠程模式指的是咱們明確指定metastore安裝的機器位置,並且能夠指定多個,須要給定參數hive.metastore.uris而且hive.metastore.local必須設置爲false。
  hive遠程模式安裝,使用mysql進行元數據的存儲,安裝步驟:
  a、安裝mysql數據庫。安裝操做以下所示:
    安裝步驟:
      1)使用root用戶安裝mysql。
        [hadoop@slaver1 ~]$ su root
        安裝mysql:
        [root@slaver1 hadoop]# yum install mysql
        安裝mysql的服務端:
        [root@slaver1 hadoop]# yum install mysql-server
        安裝mysql的devel,可選:
        [root@slaver1 hadoop]# yum install mysql-devel
      2)修改/etc/my.cnf文件中的配置信息。
        [root@slaver1 hadoop]# vim /etc/my.cnf
        添加:
        [mysql]
        default-character-set=utf8
        [mysqld]
        character-set-server=utf8
        lower_case_table_names=1
      3)啓動Mysql,設置root用戶密碼,使用root用戶登錄。啓動mysql服務,中止mysql服務,重啓mysql服務。注意在linux的普通用戶操做下,關閉mysql是沒法關閉的,Stopping mysqld:[FAILED]
        [root@slaver1 hadoop]# service mysqld start
        [root@slaver1 hadoop]# service mysqld stop
        [root@slaver1 hadoop]# service mysqld restart
        mysql開機啓動:[root@slaver1 soft]# chkconfig mysqld on
        查看mysql是否啓動:[root@slaver1 hadoop]# ps -ef | grep mysql
        設置超級管理員密碼:[root@slaver1 hadoop]# mysqladmin -u root password 123456
       使用超級管理員登錄系統:[root@slaver1 hadoop]# mysql -uroot -p123456
      4)建立Hive元數據的Mysql用戶。建立用戶,刪除沒有密碼的用戶,受權,刷新權限,最後重啓mysql服務便可。
        mysql> show databases;
        mysql> use mysql;
     mysql> show tables;
mysql> select user,host from user;
        mysql> create user 'hive' identified by 'hive';建立Hive的用戶,密碼也是hive.
mysql> grant all privileges on *.* to 'hive'@'%' with grant option;受權
        mysql> FLUSH PRIVILEGES;刷新權限
        mysql> delete from user where password="";能夠將沒有密碼的用戶刪除了,避免出現問題。ERROR 1045 (28000): Access denied for user 'hive'@'localhost' (using password: YES)
      5)使用新用戶登錄,而後建立數據庫,並修改數據庫的鏈接方式。
        [root@slaver1 ~]# mysql -uhive -p
        mysql> create database hive;建立數據庫
        mysql> alter database hive character set latin1;設置字符集
  b、hive模式安裝。
    1)、下載hive,下載地址http://archive.cloudera.com/cdh5/cdh/5/。
    2)、解壓下載的壓縮包。
      [root@slaver1 package]$ tar -zxvf hive-0.13.1-cdh5.3.6.tar.gz -C /home/hadoop/soft/
    3)、配置環境變量hive.site.xml。
      [root@slaver1 conf]$ cp hive-default.xml.template hive-site.xml
      [hadoop@slaver1 conf]$ vim hive-site.xml
      因爲複製的文件內容不少,刪除起來很慢,因此能夠本身建立一個hive-site.xml文件:
      <?xml version="1.0" encoding="UTF-8" standalone="no"?>
      <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
      <configuration>
      <!--
      <property>
        <name>hive.metastore.uris</name>
        <value>thrift://slaver1:9083</value>
      </property>
      <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/hive</value>
      </property>
      -->
      <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://slaver1:3306/hive?createDatabaseIfNotExist=true</value>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive</value>
      </property>
      <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hive</value>
      </property>
      </configuration>
    4)、將mysql-connector-java-5.1.31.jar移動到Hive的lib文件夾下面。
      [hadoop@slaver1 lib]$ cp /home/hadoop/package/mysql-connector-java-5.1.31.jar ./
    5)、將bin目錄添加到$PATH環境變量中去。
      [hadoop@slaver1 ~]$ sudo vim /etc/profile
      export HIVE_HOME=/home/hadoop/soft/hive-0.13.1-cdh5.3.6
      export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$SCRIPT:$HBASE_HOME/bin:$HIVE_HOME/bin
      [hadoop@slaver1 ~]$ source /etc/profile
    6)、啓動metastore服務。hive --service metastore &(首先要啓動hdfs和Yarn服務的哦):
       [hadoop@slaver1 conf]$ hive --service metastore &。能夠去建立的hive的數據庫裏面已經建立了不少數據表。mysql> show databases;mysql> use hive;mysql> show tables;
    7)、進入hive的shell客戶端,驗證是否安裝成功。
      [hadoop@slaver1 soft]$ hive
      而後就可使用hive了:hive> show databases;
      hive> create table user(id int,name string);建立第一個數據表之後就能夠在hdfs查看hive文件了,裏面已經存在建立的數據表。
    8)、hive web安裝。hive提供一個web的操做客戶端,通常咱們經過該頁面查看Hive的信息,配置信息包括:hive.hwi.listen.host指定監聽ip,默認爲0.0.0.0。hive.hwi.listen.port監聽端口,默認爲9999,hive.hwi.war.file=xxx。另外須要將java的tool.jar文件移動到hive的lib文件夾中。啓動命令爲:hive --service hwi &。
    9)、hive默認提供的cli(shell)服務,若是須要啓動其餘服務,那麼須要service參數來啓動其餘服務,好比thrift服務,metastore服務等等。能夠經過命令hive --service help查看支持的命令。
  c、hive命令的複習和鞏固:
    1)、hive shell命令介紹,hive的shell命令是經過hive目錄下面的bin目錄的hive來控制的,經過該文件能夠進行hive當前回話的環境管理,也能夠進行hive的表管理操做。hive命令必須使用";"進行結束標示。經過hive -H查看幫助信息。[hadoop@slaver1 ~]$ hive -H
    2)、hive的shell基本經常使用命令主要包含退出客戶端,添加文件,修改/查看環境變量,執行linux命令,執行dfs命令等等。命令包括:quit,exit,set(無參是查看,有參是設置值,只在當前回話有效),add JAR[S] <filepath> <filepath>*,list JAR[S],delete JAR[S] <filepath>*, !<linux-command>(hive> !ls -ls;),dfs<dfs command>(hive> dfs -ls /;)等等。除了hive的基本命令外,其餘的命令主要是ddl和dml等操做數據表的命令。
    3)、hiveql簡稱hql,是一種相似sql的查詢語言,絕大多數語法和sql相似。hql支持基本類型和複雜類型兩大數據類型。基本類型包括TINYINT(1 byte),SMALLINT(2 byte),INT(4 byte),BIGINT(8 byte),FLOAT(4 byte),DOUBLE(8 byte),BOOLEAN(-),string(2G)。複雜類型包括ARRAY(一組有序數組,類型必須一致),MAP(無序鍵值對,鍵值內部字段類型必須相同,並且要求key的類型爲基本數據類型),STRUCT(一組字段,類型任意)。
    4)、show 命令的主要做用是查看database,table,function等組件的名稱信息,也就是經過show命令咱們能夠知道咱們的hive中有那些數據庫,或者數據表。describe命令主要做用是獲取databse,table,partition的具體描述信息,包括存儲位置,字段類型等信息。explain命令的主要做用是獲取Hql語句的執行計劃,咱們能夠經過分析這些執行計劃來優化hql語句。
      


 九、Nginx的安裝鞏固複習:

1、使用root用戶登錄。 2、查看nginx信息,命令yum info nginx.
  [root@slaver1 ~]# yum info nginx
3、若是查看nginx信息提示nginx找不到,能夠經過修改rpm源來進行後續步驟,執行命令:rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm   [root@slaver1 ~]# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
4、再查看nginx信息。
  [root@slaver1 ~]# yum info nginx
5、安裝,命令,yum install nginx,在安裝過程當中直接輸入y.
  [root@slaver1 ~]# yum install nginx
6、啓動nginx,命令service nginx start.
  [root@slaver1 ~]# service nginx start
7、訪問http://slaver1查看nginx的web頁面。

 

十、Flume介紹:

  Flume是Apache基金會組織的一個提供的高可用的,高可靠的,分佈式的海量日誌採集,聚合和傳輸的系統,Flume支持在日誌系統中定製各種數據發送方,用於收集日誌。同時,flume提供對數據進行簡單處理,並寫到各類數據接收方(能夠定製)的能力。當前flume有兩個版本,flume0.9x版本以前的統稱爲flume-og,flume1.x版本統稱爲flume-ng。

a、主要區別以下所示:   1)、flume-og中採用Master結構,爲了保證數據的一致性,引入zookeeper進行管理。flume-ng中取消了集中master機制和zookeeper管理機制,變成了一個純粹的傳輸工具。   2)、flume-ng中採用不一樣的線程進行數據的讀寫操做,在flume-og中,讀數據和寫數據是由同一個線程操做的,若是寫出比較慢的話,可能會阻塞flume的接受數據的能力。
b、flume的結構:
  flume中以agent爲基本單位,一個agent能夠包括source,channel,sink,三種組件均可以有多個。其中source組件主要功能是接受外部數據,並將數據傳輸到channel中。sink組件的主要功能是發送flume接受到的數據爲目的的。channel的主要做用就是數據傳輸和保存的一個做用。fulme主要分爲三類結構,單agent結構,多agent鏈式結構和多路複用agent結構。
c、flume的安裝操做:
  1)、將壓縮包上傳到虛擬機。過程省略。
    http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.5.0-cdh5.3.6.tar.gz
  2)、解壓縮操做。命令以下所示:
    [hadoop@slaver1 package]$ tar -zxvf flume-ng-1.5.0-cdh5.3.6.tar.gz -C /home/hadoop/soft/
  3)、進入到flume的conf目錄,複製flume-env.sh.template爲flume-env.sh:
    [hadoop@slaver1 conf]$ cp flume-env.sh.template flume-env.sh
  4)、修改flume-env.sh,添加以下jdk的路徑信息:
    export JAVA_HOME=/home/hadoop/soft/jdk1.7.0_79
  5)、將flume的bin目錄添加到環境變量中去。
  6)詳細配置見http://www.cnblogs.com/biehongli/p/8031403.html。
  7)、驗證是否安裝成功。[hadoop@slaver1 conf]$ flume-ng version
d、flume的案例(案例詳細步驟可參考http://www.cnblogs.com/biehongli/p/8031403.html):
  使用netcat source監聽客戶端的請求,使用memory channel做爲數據的傳輸通道,使用logger sink打印監聽到的信息。步驟:
    1)、在conf文件夾中創建test.conf,裏面是agent的配置。
    2)、啓動flume-ng agent --conf ./conf/ --conf-file ./conf/test.conf --name a1 -Dflume.root.logger=INFO,console。
    3)、使用telenet命令鏈接機器,命令:telenet slaver1 4444
    4)、輸入信息查看是否成功

 十一、Sqoop的鞏固與學習:

a、sqoop是一款開源的工具,主要用於在hadoop(hive)與傳統的數據庫(mysql,oracle)之間進行數據的傳遞,能夠將一個關係型數據庫中的數據導入到hadoop的hdfs中,也能夠將hdfs的數據導入到關係型數據庫中。通常狀況下,是將數據分析的結果導出到關係型數據庫中,供其餘部門使用。sqoop專門爲大數據設計,能夠經過分割數據集來啓動多個mapreduce程序來處理每一個數據塊。
b、sqoop的安裝和部署:詳細步驟見http://www.cnblogs.com/biehongli/p/8039128.html
  1)、sqoop的下載:wget http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.5-cdh5.3.6.tar.gz
  2)、解壓縮操做。
    [hadoop@slaver1 package]$ tar -zxvf sqoop-1.4.5-cdh5.3.6.tar.gz -C /home/hadoop/soft/
  3)、複製相關的依賴包到lib文件夾中。
    [hadoop@slaver1 lib]$ cp /home/hadoop/package/mysql-connector-java-5.1.31.jar ./
    [hadoop@slaver1 lib]$ cp /home/hadoop/soft/hadoop-2.5.0-cdh5.3.6/share/hadoop/common/hadoop-common-2.5.0-cdh5.3.6.jar ./
    [hadoop@slaver1 lib]$ cp /home/hadoop/soft/hadoop-2.5.0-cdh5.3.6/share/hadoop/hdfs//hadoop-hdfs-2.5.0-cdh5.3.6.jar ./
    [hadoop@slaver1 lib]$ cp /home/hadoop/soft/hadoop-2.5.0-cdh5.3.6/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.5.0-cdh5.3.6.jar ./
  4)、修改conf/sqoop-env.sh文件。
    #Set path to where bin/hadoop is available
    export HADOOP_COMMON_HOME=/home/hadoop/soft/hadoop-2.5.0-cdh5.3.6
    #Set path to where hadoop-*-core.jar is available
    export HADOOP_MAPRED_HOME=/home/hadoop/soft/hadoop-2.5.0-cdh5.3.6
    #set the path to where bin/hbase is available
    export HBASE_HOME=/home/hadoop/soft/hbase-0.98.6-cdh5.3.6
    #Set the path to where bin/hive is available
    export HIVE_HOME=/home/hadoop/soft/hive-0.13.1-cdh5.3.6
  5)、添加sqoop常量到用戶環境變量中去。
    sudo vim /etc/profile
    export SQOOP_HOME=/home/hadoop/soft/sqoop-1.4.5-cdh5.3.6
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$SCRIPT:$HBASE_HOME/bin:$HIVE_HOME/bin:$FLUME_HOME/bin:$SQOOP_HOME/bin
  6)、測試是否安裝成功。[hadoop@slaver1 conf]$ sqoop version
c、sqoop命令介紹:
  1)、sqoop總共有14個命令,包括:codegen,create-hive-table,eval,export,help,import,import-all-tables,import-mainframe,job,list-databases,list-tables,merger,metastore,version。其中經常使用命令爲create-hive-table,export,import,help等等。
  2)、sqoop命令格式:sqoop <command> <generic-options> <command-options>。也就是說sqoop的全部命令有公用的參數列表,除此以外每一個命令都有本身特定的執行參數。
  3)、help命令主要做用是查看sqoop提供的幫助信息,命令格式:sqop help[<command>]。help後面的參數爲sqoop支持的命令格式。若是不給定help後面的參數,那麼表示顯示sqoop命令的幫助信息,若是給定後面的參數,那麼顯示具體sqoop命令的幫助信息。
    [hadoop@slaver1 lib]$ sqoop help
    [hadoop@slaver1 lib]$ sqoop help import
  4)、list-tables和list-databases兩個命令都是針對關係型數據庫(能夠經過jdbc鏈接的數據庫/數據倉庫)而言的,咱們通常能夠經過該命令查看對應數據庫中的table&database的列表。基本命令格式爲:sqoop (list-tables|list-databases) --connect jdbc_url --username db_name --password db_pwd;
    [hadoop@slaver1 lib]$ sqoop list-tables --connect jdbc:mysql://slaver1:3306/hive --username hive --password hive
    [hadoop@slaver1 lib]$ sqoop list-databases --connect jdbc:mysql://slaver1:3306/hive --username hive --password hive
  5) 、create-hive-table命令根據關係型數據庫中的表建立hive表,不進行數據的copy,只進行表結構的copy。若是hive中存在要建立的表,默認狀況下不進行任何操做。命令格式sqoop create-hive-table --connect jdbc_url --username db_name --password db_pwd --table db_table_name --hive-table hive_table_name。
    [hadoop@slaver1 lib]$ sqoop create-hive-table --connect jdbc:mysql://slaver1:3306/hive --username hive --password hive --table version --hive-table hivetest
  6)、import命令的主要做用是將關係型數據庫中的數據導入到hdfs文件系統中(或者hbase/hive)中,無論是導入到hbase仍是導入到hive中,都須要先導入到hdfs中,而後再導入到最終的位置。通常狀況下,只會採用將關係型數據庫的數據導入到hdfs或者hive中,不會導入到hbase中。import命令導入到hdfs中默認採用','進行分割字段值,導入到hive中默認採用'\u0001'來進行分割字段值,若是有特殊的分割方式,咱們能夠經過參數指定。import命令導入到hive的時候,會先在/user/$(user.name)/文件夾下建立一個同關係型數據庫表名的一個文件夾做中轉文件夾,若是該文件夾存在,則報錯。能夠經過命令sqoop help import 查看幫助命令。
    a、import命令,將mysql表tb_user中的數據導入hive的user表,hive的user表不存在。
      [hadoop@slaver1 sqoop-1.4.5-cdh5.3.6]$ sqoop import --connect jdbc:mysql://slaver1:3306/test --username hive --password hive --table tb_user --hive-table user --hive-import -m 1
    b、在a的基礎上,分別進行overwrite(覆蓋),導入和into(直接加入)導入。
      into直接導入命令同a的實例。
      overwrite以下所示(因爲數據表相同,記得刪除hdfs上面的數據表):
        [hadoop@slaver1 sqoop-1.4.5-cdh5.3.6]$ sqoop import --connect jdbc:mysql://slaver1:3306/test --username hive --password hive --table tb_user --hive-table user --hive-import -m 1 --hive-overwrite
    c、在b的基礎上,經過增長mysql的tb_user表的數據,增量導入到hive表中。
      [hadoop@slaver1 sqoop-1.4.5-cdh5.3.6]$ sqoop import --connect jdbc:mysql://slaver1:3306/test --username hive --password hive --table tb_user --where  "id>=5" --hive-table user --hive-import -m 1
    d、將tb_user表中的數據導出到使用','分割字段的hive表中。
      hive> create table user2(id int,name string,phone string)
        > row format delimited                               
        > fields terminated by ',';
      [hadoop@slaver1 sqoop-1.4.5-cdh5.3.6]$  sqoop import --connect jdbc:mysql://slaver1:3306/test --username hive --password hive --table tb_user --hive-table user2 --hive-import -m 1 --fields-terminated-by ","
    e、將tb_user表的數據導入到hdfs中。
      [hadoop@slaver1 sqoop-1.4.5-cdh5.3.6]$ sqoop import --connect jdbc:mysql://slaver1:3306/test --username hive --password hive --table tb_user --target-dir /test --m 1
    f、在d的基礎上,增量導出數據到hdfs中。
      [hadoop@slaver1 sqoop-1.4.5-cdh5.3.6]$ sqoop import --connect jdbc:mysql://slaver1:3306/test --username hive --password hive --table tb_user --target-dir /test --m 1 --check-column id --incremental append --last-value 8
  7)、export命令的主要做用是將hdfs文件數據導入到關係型數據庫中,不支持從hive和Hbase中導出數據,可是因爲hive的底層就是hdfs的一個基本文件,因此能夠將hive導出數據轉換爲從hdfs導出數據。導出數據的時候,默認字段分割方式是',',因此若是hive的字段分割不是',',那麼就須要設計成對應格式的分割符號。能夠經過命令:sqoop hep export查看幫助文檔。
    注意:前提條件,關係型數據庫中目的表已經存在。
    a、將hdfs上的文件導出到關係型數據庫數據表中。
      [hadoop@slaver1 ~]$ sqoop export --connect jdbc:mysql://slaver1:3306/test --username hive --password hive --table tb_user_copy --export-dir /test
    

 

 

 

 

 

 

 

 


 

待續......

相關文章
相關標籤/搜索