初識Hbase-使用批量導入將.TSV文件中數據導入到Hbase表中

Hbase中數據的批量導入->TSV格式文件的數據導入到hbase表中

importTSV工具

作用

1.hbase內部提供了將.TSV文件中數據導入到hbase表的jar包
2.tsv文件格式以製表符(tab鍵)分隔的數據

測試HADOOP_CLASSPATH中是否包含使用到hbasejar包

    進入hadoop目錄,運行bin/yarn jar /opt/ch5.7.6/moudlesase-1.2.0-cdh5.7.6/lib/hbase-server-1.2.0-cdh5.7.6.jar 此jar包中提供了importtsv方法
    1.如果沒有聲明hadoop的環境變量會報錯,類沒有找到-ClassNotFound....;
    2.解決辦法:進入hbase目錄bin/hbase mapredcp將所有的jar包export到HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/所有jar
    -->export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/跟hbase目錄bin/hbase mapredcp中所有以.jar結尾的文件

jar包中importtsv方法的用法

    1.importtsv -Dimporttsv.columns=a,b,c <tablename> <inputdir>
    參數:columns=a,b,c:導入表中的數據和表中的哪個字段對應
        tablename:表名
        inputdir:要導入的文件路徑(hdfs上的文件路徑,因爲現在執行的是mapreduce程序默認會從hdfs上讀取文件)
        **1.用法一:直接將數據文件中的內容導入到hbase中**
            1.將要導入的.tsv文件(注意一條數據一行,多個字段之間使用製表符分隔)上傳到hdfs上;
            2.進入hadoop目錄:bin/yarn jar /opt/cdh5.7.6/moudles/hbase-1.2.0-cdh5.7.6/lib/hbase-server-1.2.0-cdh5.7.6.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex student:stu_info /import_data/importData.tsv
            3.幫助文檔:
            進入hadoop目錄:bin/yarn jar /opt/cdh5.7.6/moudles/hbase-1.2.0-cdh5.7.6/lib/hbase-server-1.2.0-cdh5.7.6.jar importtsv
        **2.用法二:工作中常用的方法,不用直接操作表,不會產生併發對錶的寫入,不會影響業務**
            1.將數據文件轉換成HFILE文件
            Hadoop目錄:bin/yarn jar /opt/cdh5.7.6/moudles/hbase-1.2.0-cdh5.7.6/lib/hbase-server-1.2.0-cdh5.7.6.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex student:stu_info -Dimporttsv.bulk.output=/import_data/output(轉換後HFILE文件在hdfs上存放路徑,此文件不能提前存在) stu_info(上面的表相對應) /import_data/input2(要轉換的hdfs上的.tsv文件)
            2.將生成的HFILE文件導入到hbase表中
            Hadoop目錄:bin/yarn jar /opt/cdh5.7.6/moudles/hbase-1.2.0-cdh5.7.6/lib/hbase-server-1.2.0-cdh5.7.6.jar  completebulkload /import_data/output(1.中指定的HFILE在hdfs上的輸出目錄) student:stu_info(要將數據導入的表,此處需要注意stu_info表中的列族要和1.中的info:name中的info相同,即stu_info表中的列族是info)
        **3.兩種方法的區別**
            1.使用方法一如果數據要導入的數據量比較大的時候,這張表會持續的進行讀寫操作,如果這張表還對外提供業務訪問,此時進行批量的向表中寫入數據會造成業務阻塞,直接影響業務;
            2.使用方法二,在將數據文件轉換成HFILE文件時並沒有對錶進行操作,並不會影響外部業務對該表的訪問;將生成的HFILE文件導入到hbase表中實際就是一個移動文件的過程,將轉換後的HFILE移動到hbase表目錄下。
            3.方法二的缺點:正常我們使用put向hbase表寫入數據的時候,數據首先會被寫入到memstore(內存)中,如果直接使用completebulkload則內存中沒有要寫入的數據;此時不能進行快速查詢(快速查詢會從memstore中查找數據),在第一次查找數據時就必須訪問storefile,去storefile中去查找。
            4.導入不同格式的文件(即數據間分隔符不同的文件)
                1.以製表符分隔的文件爲.tsv文件
                2.以","(英文逗號)分隔的文件爲.csv文件
                3.在導入數據指定文件分隔符
                    '-Dimporttsv.separator=指定的分隔符'
                    demo:
                    '-Dimporttsv.separator=,'->以英文逗號分隔
    2.查看jar包中方法文檔
        1.查看jar中所有方法:hadoop目錄:bin/yarn jar /opt/cdh5.7.6/moudles/hbase-1.2.0-cdh5.7.6/lib/hbase-server-1.2.0-cdh5.7.6.jar 
        2.查看jar中具體方法的用法:hadoop目錄:bin/yarn jar /opt/cdh5.7.6/moudles/hbase-1.2.0-cdh5.7.6/lib/hbase-server-1.2.0-cdh5.7.6.jar importtsv
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章