导入到 HDFS 或 Hive(直接)

Import to HDFS or Hive(directly)

  1. 堆栈:使用 Ambari 2.1 安装 HDP-2.3.2.0-2950
  2. 源是一个 MS SQL 数据库,大约 1.6TB 和大约 25 tables 最终 objective 是检查现有查询是否可以 运行 在 HDP
  3. 上更快
  4. 多次导入数据的时间和可用性并不奢侈,因此,导入必须完成一次,并且 Hive tables、查询等需要进行试验,例如,首先在 ORC 中创建一个普通的分区 table。如果还不够,请尝试索引等。可能,我们还会评估 Parquet 格式等

4.As 4. 的解决方案,我决定首先将 tables 以 Avro 格式导入 HDFS,例如:

sqoop import --connect 'jdbc:sqlserver://server;database=dbname' --username someuser --password somepassword --as-avrodatafile --num-mappers 8 --table tablename --warehouse-dir /dataload/tohdfs/ --verbose

现在我打算创建一个 Hive table,但我提到了一些问题 here

我的问题是,鉴于以上所有要点,什么是最安全的(就时间而言而不是弄乱 HDFS 等)方法 - 首先引入 HDFS,创建 Hive tables 并进行实验或者直接导入到 Hive 中(我不知道如果我现在删除这些 tables 并希望重新开始,我是否必须重新导入数据)

对于加载,您可以尝试这些选项

1) 您可以执行 mysql 导入 csv 文件,该文件将作为备份存储在您的 Linux 文件系统中,然后执行 distcp 到 HDFS。

2) 如前所述,您可以执行 Sqoop 导入并将数据加载到 Hive table (parent_table).

要检查使用不同格式和分区的性能 table,您可以使用 CTAS(Create Table As Select)查询,您可以在其中创建新的 table s 来自基数 table (parent_table)。在 CTAS 中,您可以提及 parque 或 avro 等格式,并且分区选项也在那里。

即使您删除了 CTAS 创建的新 table,基础 table 也会存在。

根据我的经验,Parque + 分区会给出最好的性能,但这也取决于你的数据。

我看到连接和设置都是正确的。但是我在查询中没有看到 --fetch-size 。默认情况下,--fetch-size 是 1000,这在您的情况下会永远持续下去。如果列数较少。我建议增加 --fetch-size 10000。当列数小于 50 时,我已经上升到 50000。如果你有 100 列,可能是 20000。我建议检查每行数据的大小,然后再决定。如果有一列的数据大小大于 1MB。那我就不推荐1000以上的了