ClickHouse入門:表引擎-HDFS


前言
插件及服務器版本
服務器:ubuntu 16.04
Hadoop:2.6
ClickHouse:20.9.3.45

 

文章目錄

    • 簡介
    • 引擎配置
    • HDFS表引擎的兩種使用形式
    • 引用

 

簡介

ClickHouse的HDFS引擎可以對接hdfs,這里假設HDFS環境已經配置完成,本文測試使用的HDFS版本為2.6
HDFS引擎定義方法如下:
ENGINE = HDFS(hdfs_uri,format)
參數定義:

  • hdfs_uri表示HDFS的文件存儲路徑
  • format表示文件格式(指ClickHouse支持的文件格式,常見有CSV、TSV和JSON等)

HDFS表引擎兩種使用方式:

  • 即負責讀文件也負責寫文件
  • 只負責讀文件,文件寫入工作則由外部系統完成

引擎配置

  • 由於hdfs配置了HA,如果不做配置,創建一張只負責讀文件的表,並查詢數據,會報如下錯誤:

    Code: 210. DB::Exception: Received from localhost:9000. 
    DB::Exception: Unable to connect to HDFS: InvalidParameter: Cannot parse URI: 
    hdfs://mycluster, missing port or invalid HA configuration	
    Caused by: HdfsConfigNotFound: Config key: dfs.ha.namenodes.mycluster not found. 
    

    在這里插入圖片描述

  • 需要做如下配置解決問題
    1、拷貝hdfs-site.xml文件至/etc/clickhouse-server,並修改文件名為hdfs-client.xml
    在這里插入圖片描述
    2、修改ClickHouse Server啟動文件,添加環境變量Environment=“LIBHDFS3_CONF=/etc/clickhouse-server/hdfs-client.xml”
    備注:
    這里測試環境為ubuntu環境,啟動服務用systemctl啟動,所以修改啟動文件的路徑為:

    vi /etc/systemd/system/clickhouse-server.service 

    在這里插入圖片描述
    3、加載並重啟clickhouse-server

    systemctl daemon-reload
    systemctl restart clickhouse-server.service 
    

    4、測試
    新創建一張只讀表,對應的hdfs上已經提前放了一個測試文件 1.txt
    在這里插入圖片描述

    CREATE TABLE test_hdfs ( id Int32 ) ENGINE HDFS('hdfs://mycluster/1.txt','CSV'); 

    在這里插入圖片描述
    查詢表里的數據
    在這里插入圖片描述

HDFS表引擎的兩種使用形式

  • 即負責讀文件,也負責寫文件

    1. 創建一張新表

      CREATE TABLE test_hdfs_read ( id Int32, name String ) ENGINE HDFS('hdfs://mycluster/test','CSV'); 

      在這里插入圖片描述

    2. 插入數據

      insert into test_hdfs_read values (1,'tracy'); 

      在這里插入圖片描述

    3. 查詢表數據並查看hdfs目錄情況
      在這里插入圖片描述

      在這里插入圖片描述
      這里可以看到hdfs目錄下多了一個test文件

  • 只負責讀文件,文件寫入工作則由外部系統完成
    這種形式類似於hive的外掛表,由其它系統直接將文件直接寫入HDFS,通過參數hdsfs_ui和format與HDFS的文件路徑、文件格式建立映射,其中hdfs_uri支持以下幾種常見的配置方法:
    1. 絕對路徑:會指定路徑上的單個文件,例如hdfs://mycluster/1.txt
    2. *通配符:匹配所有字符,例如hdfs://mycluster/ * ,會讀取hdfs://mycluster/路徑下的所有文件
    3. ?通配符:匹配單個字符,例如hdfs://mycluster/test_?.txt會匹配所有test_?.txt的文件,?代表任意字符
    4. {M…N}數字區間:匹配指定數字的文件,例如路徑hdfs://mycluster/test_{1…3}.txt,則會讀取hdfs://mycluster/路徑下的文件test_1.txt,test_2.txt,test_3.txt

    1. 在hdfs新建一個目錄,並放3個文件
      在這里插入圖片描述

    2. 測試*通配符

      CREATE TABLE test_hdfs_read_all ( `id` Int32, `name` String ) ENGINE = HDFS('hdfs://mycluster/test_hdfs_read/*', 'CSV') 

      在這里插入圖片描述

    3. 測試?通配符

      CREATE TABLE test_hdfs_read_1 ( `id` Int32, `name` String ) ENGINE = HDFS('hdfs://mycluster/test_hdfs_read/test_?.csv', 'CSV') 

      在這里插入圖片描述

    4. 測試數字區間通配符通配符

      CREATE TABLE test_hdfs_read_2 ( `id` Int32, `name` String ) ENGINE = HDFS('hdfs://mycluster/test_hdfs_read/test_{2..3}.csv', 'CSV') 

      在這里插入圖片描述
      這里只匹配了test_2和test_3,所以只有兩條記錄

引用

https://github.com/ClickHouse/ClickHouse/issues/8159

文章轉載自 http://www.dtmao.cc/news_show_314553.shtml


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM