【发布时间】:2016-05-06 07:22:39
【问题描述】:
- 堆栈:使用 Ambari 2.1 安装了 HDP-2.3.2.0-2950
- 来源是一个大约 1.6TB 和大约 25 个表的 MS SQL 数据库 最终目标是检查现有查询是否可以在 HDP 上运行得更快
- 没有太多时间和可用性来多次导入数据,因此必须导入一次,并且需要对 Hive 表、查询等进行试验,例如,首先创建一个普通的, ORC 中的分区表。如果还不够,请尝试索引等。可能我们还会评估 Parquet 格式等
4.作为 4. 的解决方案,我决定首先以 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 表,但我有一些问题提到了here。
我的问题是,鉴于上述所有要点,最安全的方法是什么(就时间而言,而不是弄乱 HDFS 等) - 首先进入 HDFS,创建 Hive 表并进行实验或直接导入 Hive(I不知道如果我现在删除这些表并希望重新开始,我是否必须重新导入数据)
【问题讨论】:
-
我发现这 2 个断言之间存在矛盾:“没有时间多次导入数据” vs “必须对目标表进行试验...重新创建表 w/不同的选项”。如果您想尝试使用不同分区方案的不同 SerDe(ORC、Parquet),那么您必须重新创建 Hive 表并重新加载它们几次。
-
那么你是什么意思“导入数据”——你想在 HDFS 中创建一个可移植格式(例如 CSV)的转储,用作许多来源次?使用
Sqoop。或者您想要一个端到端的解决方案来从 SQL Server 读取数据并将数据直接加载到您的分区 ORC/Parquet 格式?使用Spark,最新版本可以像 Sqoop 一样进行并行加载(但要注意一些不是从 Metastore 自动获取的选项,例如 Parquet 压缩——并且分区管理并不简单) -
通过“导入数据”,我的意思是“访问 sql 服务器并将数据加载到 hdfs”,即我可以在 Hive 中做任何我想做的事情。次,但我不能多次访问 sql 服务器来获取数据。我已经以 Avro 格式导入了 sql server 表,现在我正在构建 Hive ORC 和 Hive Avro 表,唯一的困惑是导入期间的 Avro 文件格式是否会造成性能下降。稍后执行 Hive 查询时会出现问题
-
使用 ORC 不要忘记您可以调整一些属性,具体取决于数据配置文件和查询模式——参见。 fr.slideshare.net/Hadoop_Summit/…