将大量数据插入配置单元(大约64MB)

时间:2015-11-09 00:49:26

标签: hadoop hive odbc

好的,所以我在linux机器上设置了远程hadoop节点上的hive表。我试图插入一个大的json字符串时遇到问题,大可能是64MB或更多,因为除非我接近该限制,否则map reduce将无法正常工作。我已经成功地转移了8到9MB,但是如果我尝试做的不仅仅是查询失败,那么它就会变得越来越高。我还必须覆盖C#的默认json序列化器才能做到这一点,这不是我所知道的好习惯,但我真的不知道其他任何方法。

无论如何,这就是我将数据存储到Hive中的方式:

namespace HadoopWebService.Controllers
{
    public class LogsController : Controller
    {
        // POST: HadoopRequest
        [HttpPost]
        public ContentResult Create(string json)
        {
            OdbcConnection hiveConnection = new OdbcConnection("DSN=Hadoop Server;UID=XXXX;PWD=XXXX");
            hiveConnection.Open();
            Stream req = Request.InputStream;
            req.Seek(0, SeekOrigin.Begin);
            string request = new StreamReader(req).ReadToEnd();
            ContentResult response;
            string query;

            try
            {
                query = "INSERT INTO TABLE error_log (json_error_log) VALUES('" + request + "')";
                OdbcCommand command = new OdbcCommand(query, hiveConnection);
                command.ExecuteNonQuery();
                command.CommandText = query;
                response = new ContentResult { Content = "{status: 1}", ContentType = "application/json" };
                hiveConnection.Close();
                return response;
            }
            catch(Exception error)
            {
                response = new ContentResult { Content = "{status: 0, message:" + error.ToString()+ "}" };
                System.Diagnostics.Debug.WriteLine(error.Message.ToString());
                hiveConnection.Close();
                return response;
            }
        }
    }
}

是否有一些设置可用于插入大量数据?我假设必须有一些缓冲区无法加载所有内容。我已经检查了谷歌,但我没有找到任何东西,主要是因为这可能不是正确插入Hadoop的方式,但我现在真的没有选择,我不能使用HDInsight,所有我'得到的是ODBC连接。

编辑:这是我得到的错误:

  

System.Data.Odbc.OdbcException(0x80131937):ERROR [HY000] [HiveODBC]   (35)来自Hive的错误:错误代码:'0'错误消息:'ExecuteStatement   完成操作状态:ERROR_STATE'。

     

消息:System.Data.Odbc.OdbcException(0x80131937):错误[HY000]   [Microsoft] [HiveODBC](35)来自Hive的错误:错误代码:'0'错误   消息:'ExecuteStatement已完成操作状态:   ERROR_STATE”。在   System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle,   RetCode retcode)at   System.Data.Odbc.OdbcCommand.ExecuteReaderObject(的CommandBehavior   behavior,String方法,Boolean needReader,Object [] methodArguments,   SQL_API odbcApiMethod)at   System.Data.Odbc.OdbcCommand.ExecuteReaderObject(的CommandBehavior   behavior,String方法,Boolean needReader)at   System.Data.Odbc.OdbcCommand.ExecuteNonQuery()

0 个答案:

没有答案