에멋지게 쓰여진 기사,이 확장 프로그램으로 Jupyter 노트북을 바로 설정하십시오.[1], William Koerhsen이 Jupyter 노트북 확장을 사용하여 노트북 템플릿을 만들어 생산성을 향상시키는 방법을 설명합니다. 이 템플릿은 각 데이터 과학 여정의 시작점 역할을합니다. 우리는 모두 새로운 조사를 시작할 때 동일한 상용구 코드를 입력하는 것을 발견했습니다.
본질[1]Javascript 파일을 Jupyter의 nbextensions 시스템에서 사용하는 특정 폴더에 넣을 수 있으며 새 노트북이 생성 될 때마다 Jupyter에서 호출됩니다. 그의 기사에서 그는 기본적이고 일반적인 Python 상용구를 사용하여 새 노트북을 만들고 기본 "Untitled.ipynb"에서 노트북의 이름을 바꾸도록하는 후크를 활성화합니다. 그는 동반 기사가 있습니다.Jupyter 노트북 확장[2]Jupyter 노트북 확장을 설치하는 방법을 보여줍니다.
DrivenData.org에 또 다른 흥미로운 기사가 있습니다.Cookiecutter 데이터 과학[삼]데이터 과학 프로젝트에 유용한 조직을 자세히 설명합니다.
제 경우에는 제가 사용하는 노트북 템플릿이[1]과[삼]. 그것은 내가 포함해야한다는 것을 알고 있지만 종종 일회성 노트북에 추가하기에는 너무 게으르다는 코드를 추가합니다 (나는 당신에 대해 이야기하고 있습니다, unittest!) 너무 많이 나는 내가 단지 나만 할 것이라고 생각했던 프로젝트를 시작했습니다. 한 번 사용했지만 여러 번 사용했거나 처음에 생각했던 것 이상으로 프로젝트를 확장했습니다. 엉망진창을 피하기 위해 필요에 따라 채울 수있는 몇 가지 공통 구조를 갖는 것이 도움이됩니다.
노트북 확장을 파악하고 Jupyter 시작 코드를 리버스 엔지니어링하는 모든 노력이 W Koehrsen에 의해 수행되었지만, 템플릿에 각 셀을 추가하기 위해 Javascript 파일을 수동으로 편집하는 것은 다소 지루합니다. 몇 줄이 넘는 템플릿 노트북의 경우 javascript 파일에 구문 오류가 발생할 가능성이 높습니다.
이 기사 (및 해당 github 저장소의 코드)는 템플릿 Jupyter 노트북에서 main.js 파일을 (반) 자동으로 생성하여이 프로세스를 단순화합니다. 코드를 실행하기 전에 템플릿을 .py 파일로 수동으로 저장해야하므로 반자동입니다.노트북 템플릿 생성기 .ipynbJupyter와 함께.
전제 조건
아직 Jupyter Extensions가 없다면 다음 도움말을 확인하세요.[2]또는 명령 프롬프트에서 다음 코드를 실행하십시오. pip install jupyter_contrib_nbextensions && jupyter contrib nbextensions install --user 그런 다음 새 노트북 서버를 시작하고 확장 탭으로 이동). 오랫동안 보안 분야에서 일해 왔기 때문에 저는 제 컴퓨터에서 관리자로 실행하지 않기 때문에 적어도 제 경우에는 '--user'를 추가해야합니다.
에서 참조하는 GitHub 저장소에서 "setup"폴더의 복사본을 가져와야합니다.[1], 즉여기. notebook-template-generator 노트북을 실행하여 설정 디렉토리가 이동해야하는 경로를 찾을 수 있습니다. 경로가 존재하지 않으면 예상하는 경로가 표시됩니다. virtualenv를 사용하는 내 Mac에서는 다음과 같이 끝납니다. ~ / development / Python / Virtualenvs / py37 / lib / python3.7 / site-packages / jupyter_contrib_nbextensions / nbextensions / setup jupyter nbextensions를 설치할 때 "--user"옵션을 사용했기 때문에 이것은 내 홈 디렉토리에 있습니다.
notebook-template.ipynb 및 notebook-setup-generator.ipynb가있는이 기사의 GitHub 저장소는 다음과 같습니다.여기.
달리는
Jupyter로 notebook-template.ipynb 및 notebook-setup-generator.ipynb를 모두 엽니 다. 기본 Jupyter 노트북에서 원하는 내용을 포함하도록 notebook-template.ipynb를 편집합니다. 파일 메뉴에서 "다른 이름으로 다운로드…"를 선택하고 "Python (.py)"을 선택합니다. macOS에서는 ~ / Downloads 디렉토리에 notebook-template.py.html로 저장됩니다 (변경get_notebook_template_path() 다른 곳에 넣으려면).
다음으로 이동notebook-setup-generator.ipynb그리고 선택모두 실행~로부터세포메뉴. 모든 것이 잘되면 기존에 덮어 쓸 것인지 묻습니다.setup / main.js파일. 다음에 새 Jupyter 노트북을 만들면 사용중인 버전의 새 셀 사본으로 채워집니다.notebook-template.ipynb.
추가 참고 사항
가상 환경에서 Python 3.7.2를 사용하여 macOS 10.14.3에서 테스트했습니다. 파서generate_setup_javascript ()매우 기본적이므로 복잡한 notebook-template.ipynb 파일이 올바르게 구문 분석되지 않을 수 있습니다.
Koehrsen의 원래 Javascript 기능에서promptName, 새 노트북의 이름이 "제목 없음"인지 확인합니다. 그렇다면 이름을 변경하라는 메시지가 표시됩니다. 나는 그것에 주석을 달았다js_postamble문자열notebook-setup-generator.ipynb템플릿을 디버깅 할 때 고통 스럽지만 템플릿에 만족하면 다시 활성화해도됩니다.
In a nicely written article, Set Your Jupyter Notebook up Right with this Extension[1], William Koerhsen describes how to use Jupyter notebook extensions to improve productivity by creating a notebook template. This template serves as the starting point for each of your data science journeys. We have all found ourselves typing the same boilerplate code at the start of a new investigation.
The essence of [1] is that you can put a Javascript file into a particular folder used by Jupyter’s nbextensions system, and it will be called by Jupyter each time a new notebook is created. In his article, he creates a new notebook with some basic, common Python boilerplate, and also enables a hook that forces you to rename the notebook from the default “Untitled.ipynb”. He has a companion article, Jupyter Notebook Extensions[2] that shows how to install Jupyter notebook extensions.
There is another interesting article at DrivenData.org, Cookiecutter Data Science[3] that details a helpful organization for Data Science projects.
In my particular case, the notebook template that I use expands on both [1] and [3]. It adds in some code that I know I should include but am often too lazy to add in to a one-off notebook (I’m talking about you, unittest!) Too many times I have started a project that I thought I would only use once, but ended up using multiple times, or expanded the project beyond what I initially envisioned. To avoid an unruly mess, it helps me to have some common structure that I can fill in as needed.
Although all the hard work of figuring out notebook extensions and reverse engineering Jupyter startup code has been done by W Koehrsen, manually editing the Javascript file to add each cell in the template is somewhat tedious. For any template notebook more than a few lines, there is a good chance of introducing a syntax error into the javascript file.
This article (and the code in the corresponding github repository) simplifies this process by (semi-)automatically generating the main.js file from a template Jupyter notebook. It is only semi-automatic as you must manually save your template as a .py file before running the code in notebook-template-generator.ipynb with Jupyter.
Prerequisites
If you don’t yet have Jupyter Extensions, check out this article: [2] or just run the following code in a command prompt: pip install jupyter_contrib_nbextensions && jupyter contrib nbextensions install --user and then start a new notebook server and navigate to the extensions tab). Having worked in the security space for a long time, I don't run as an administrator on my machine, so adding '--user' is necessary, at least in my case.
You will need to grab a copy of the “setup” folder from the GitHub repository referenced in [1], which is here. You can find the path where the setup directory needs to go by running the notebook-template-generator notebook; if the path does not exist it will show the path where it expects it. On my Mac using virtualenv, it ends up here: ~/development/Python/Virtualenvs/py37/lib/python3.7/site-packages/jupyter_contrib_nbextensions/nbextensions/setup This is in my home directory because I used the "--user" option when I installed jupyter nbextensions.
The GitHub repository for this article with notebook-template.ipynb and notebook-setup-generator.ipynb is here.
Running
Open both notebook-template.ipynb and notebook-setup-generator.ipynb with Jupyter. Edit notebook-template.ipynb to contain whatever you would like in a basic Jupyter notebook. Under the File menu, choose “Download as…” and pick “Python (.py)”. On macOS, this will be saved as notebook-template.py.html in the ~/Downloads directory (change get_notebook_template_path() if you want to put it somewhere else).
Next, go to notebook-setup-generator.ipynb and select Run All from the Cell menu. If all goes well, it will ask you if you would like to overwrite the existing setup/main.js file. The next time you create a new Jupyter notebook, it will be populated with a fresh copy of the cells from your version of notebook-template.ipynb.
Additional Notes
I have tested this on macOS 10.14.3 with Python 3.7.2 in a virtual environment. The parser in generate_setup_javascript() is very basic, so it’s possible that complicated notebook-template.ipynb files will not be parsed correctly.
In Koehrsen’s original Javascript function promptName, it checks to see if the new notebook is called “Untitled”; if so, it prompts you to rename it. I have that commented out in the js_postamble string in notebook-setup-generator.ipynb as it is painful when debugging your template, but feel free to re-enable it when you are happy with your template.
Learning is one of the overcommunicated but underleveraged tools of the common entrepreneur.
Everyone talks about methods of learning, but few people find realistic and authentic techniques that actually yield a net profit in the information and application categories.
Elon Musk has broken through that barrier with learning techniques that have proven successful not just once, but time and time again.
A good argument could be made that Musk has leveraged his learning by becoming a disruptor. He and his companies have shifted entire industries, including the transportation sector, the energy sector, and the space sector.
He recently announced at a press conference that his plans for his biotech company Neuralink are progressing quite nicely, hinting at yet another sector which his hands will likely shift in the coming years.
Yes, Musk is a once-in-a-lifetime genius. Likely on the same levels as Nikola Tesla, Albert Einstein, Isaac Newton. He has a different way of viewing problems than the average entrepreneur.
Of course, he reads hundreds of books. He works with top-level thinkers. He has astronomical levels of funding to put towards his every whim. But that’s not what makes him a great learner.
His learning methods aren’t that regal. In fact, his two rules for how to learn anything faster can be implemented by anyone at any time. Including you.
You, too, can be a rocket scientist, if you wanted. Here’s how.
Identify the different parts of the tree
When it comes to learning, Musk is quick to note that he believes that most people can learn more than they currently know.
When it comes to the average entrepreneur, Musk claims that they often don’t break through their perceived limits and try to learn beyond their current capacity. Or, as he goes on to clarify, they don’t know how to outline their information in a way that leads to further revelation.
In a conversation on Reddit, Musk discussed his approach to learning and the structure he uses as such:
“One bit of advice: it is important to view knowledge as sort of a semantic tree — make sure you understand the fundamental principles, i.e. the trunk and big branches, before you get into the leaves/details or there is nothing for them to hang on to.”
From this, we begin to see Elon Musk’s first rule of learning:
Rule #1 — Make sure you’re building a tree of knowledge
What does this mean for you practically? It helps the common entrepreneur understand that not everything is weighed with equal gravitas or importance.
When it comes to learning, there is a difference between material that ends up hanging from a branch and the material that makes up the base of the trunk of your tree.
It’s the periphery vs. the central.
Musk is a master of understanding what is at the core of each of the sectors his entrepreneurial ventures sit in.
He starts there, ensuring that he has the best possible grasp on the “trunk” material before moving off into the minutiae of the branches and the leaves.
Many of us do the opposite. We load up on periphery facts while never fully understanding how or why they connect back to the trunk. This outward-facing-in method leaves many of our brains overcrowded with misidentified and, ultimately, unimportant knowledge.
That’s not learning. It’s cramming.
The result of our efforts is a tree with a toothpick trunk and an overload of teeming branches, threatening to snap off as we try to cram one more idea or thought within our brains.
If you want to learn anything faster, you need to start with the materials that make up the trunk. It might be a tad slower at the onset, but without a sturdy trunk, you won’t have the base to support any additional learning and skill.
Connections power your learning
The brilliance of Elon Musk’s learning strategy isn’t necessarily in his ability to understand core central concepts.
Many entrepreneurs over generations have had solids grasp on core tenets and principles.
Musk’s brilliance is found in his second rule of learning, which underlines his ability to build vast and towering trees of intellect across multiple sectors.
Rule #2 — You can’t remember what you can’t connect
This is how Musk was able to span sectors and shift entire industries seemingly overnight.
He started with solid roots and dense trunks, and then as he began to grow his knowledge upward, he began connecting branches and leaves together with other branches and leaves from other trees.
Musk never learns a piece of information at random. Everything he intakes, he connects back to some deeper, more solid base.
Most learners today are not master gardeners, but stick collectors. We walk around life, picking up tidbits here and tidbits there until our arms are full of sticks.
Once we have a good bunch of sticks, we do what comes naturally whenever there is a pile of sticks lying around. We burn them.
We think the size of our fires equals the size of our learning. But we are slow to realize what Elon Musk has built his entire learning structure on: that fires burn out.
Musk plants trees, in rich soil, that grow to be thick and abundant centers of learning.
You can do the same. You just need to embrace his two rules. Build the trunk first, then work tirelessly on making connections.
Exponential growth
Like any new system, it might take you a bit to get the hang of it. You might actually feel like you are learning slower than you did previously. That’s okay. What you’re actually doing is building the foundation for exponential growth.
Henry Ford once said, “If you always do what you’ve always done, you’ll always get what you’ve always got.”
If you want to learn anything faster, try the Elon Musk approach, but be warned. You may end up becoming a rocket scientist far faster than you previously thought possible.
지금 읽고있는 내용이 데이터인지 알고 계십니까? 그것은 당신에게 몇 마디처럼 보일지 모르지만 온라인에서 읽는 모든 것은 수집하고, 분리하고, 조작 할 수있는 데이터입니다. 이것이 바로 웹 스크레이퍼입니다. 웹 사이트 (HTML 코드) 또는 데이터베이스를 만들기 위해 생성 된 코드를 거치고 원하는 데이터를 가져옵니다. 거의 모든 웹 사이트를 스크랩 할 수 있습니다. 일부 사이트에는 이러한 스크레이퍼가 데이터를 수집하지 못하도록하는 조치가 포함되어 있지만, 충분히 좋은 경우 본질적으로 온라인 웹 사이트의 99 %를 스크 레이 핑 할 수 있습니다.
웹 스크레이퍼가 무엇인지 몰랐다면 이제 아이디어가 생겼으며이 기사를 읽는 이유를 알 수 있습니다. 돈. 웹 스크랩 핑은 생각만큼 어렵지 않은 수익을 창출하는 독특한 방법이 될 수 있습니다. 사실 제가 보여 드리려고하는 모든 방법과 예제는 50 줄도 채 안되는 코드를 만들었고 단 몇 시간 만에 배울 수 있습니다. 그래서 제가 보여 드릴게요 ...
웹 스크래핑을 사용하여 돈을 버는 3 가지 방법
1. 봇 생성
봇은 특정 작업을 수행하는 프로그램의 기술 용어입니다. 이 작업을 수행하는 방법에 따라 직접 수행 할 수있는 기술적 능력이없는 사람들에게 판매 할 수 있습니다.
봇을 만들고 판매하는 방법을 보여주기 위해 Airbnb 봇을 만들었습니다. 이 봇을 사용하면 사용자가 위치를 입력 할 수 있으며에어 비앤비가격, 등급, 허용되는 손님 수, 침실, 침대 및 욕실을 포함하여 해당 위치에서 제공됩니다. 이 모든 작업은 에어 비앤비 웹 사이트의 각 게시물 데이터를 웹에서 스크랩하여 수행됩니다.
작동중인 봇을 시연하기 위해 위치를 입력하겠습니다. 이탈리아 로마에서 에어 비앤비를 검색하고 싶다고 가정 해 보겠습니다. 간단히 봇에 Rome을 입력하면 몇 초 내에 272 개의 고유 한 Airbnb를 체계화 된 Excel 스프레드 시트로 반환합니다.
이제 모든 주택 / 특징 및 다른 게시물과의 비교를 훨씬 쉽게 볼 수 있습니다. 필터링하기도 훨씬 쉽습니다. 저는 4 인 가족에 살고 있으며 로마에 간다면 적절한 가격에 최소 2 개의 침대가있는 에어 비앤비를 찾을 것입니다. 이제 깔끔하게 정리 된이 스프레드 시트를 사용하면 Excel에서 내 요구 사항에 맞게 필터링하기가 매우 쉽습니다. 그리고 272 개의 결과 중 7 개가 내 일치 요구 사항과 함께 반환되었습니다.
이 7 개 중에서 내가 고르는 것은 바티칸 성 베드로 다니엘인데, 그것은 매우 좋은 등급을 가지고 있으며 1 박당 61 달러의 비용으로 7 개 중 가장 저렴합니다. 그래서 내가 원하는 것을 고른 후, 게시물의 링크를 브라우저에 복사하고 예약합니다.
휴가를 갈 때 머물 곳을 찾는 것은 매우 힘든 일이 될 수 있습니다. 저는 우리 대부분이 한 번쯤은 그것을 느꼈을 것입니다. 이 때문에이 과정을 더 쉽게하기 위해 기꺼이 비용을 지불하는 사람들이 있습니다. 이 봇을 사용하여 프로세스를 더 쉽게 만들었습니다. 당신은 방금 내가 5 분 안에 좋은 가격에 나의 모든 매칭 요구 사항을 가진 방을 예약하는 것을 보았다.
사람들이 삶을 조금 더 쉽게 만들기 위해 기꺼이 돈을 지불 할 것이라고 믿으십시오.
2. 재판매
웹 스크래핑의 가장 일반적인 용도 중 하나는 웹 사이트에서 가격을 내리는 것입니다. 매일 실행되는 웹 스크래핑 프로그램을 만들고 특정 제품의 가격을 반환하는 사람들이 있으며, 가격이 일정 금액으로 떨어지면 프로그램이 매진되기 전에 자동으로 제품을 구매합니다. 그런 다음 제품에 대한 수요가 공급보다 높기 때문에 수익을 창출하기 위해 제품을 더 높은 가격으로 재판매합니다. 이것은 웹 스크레이퍼가 사용하는 많은 재판매 전략의 한 예일뿐입니다.
제가 예를 보여 드릴 또 다른 것은 당신에게 많은 돈을 절약하고 당신을 위해 많은 것을 벌 수 있습니다.
모든 소매 웹 사이트에는 제한된 거래 및 판매가 있으며 여기에 원래 가격과 판매 가격이 표시됩니다. 하지만 그들이하지 않는 것은 원래 가격에서 실제로 얼마나 할인되었는지 보여주는 것입니다. 예를 들어 시계가 원래 가격이 350 달러이고 판매 가격이 300 달러라면 50 달러 할인이 많은 돈이라고 생각할 수 있지만 실제로는 14.2 % 할인입니다. 이제 티셔츠의 원래 가격이 $ 50이고 판매 가격이 $ 40 인 경우 $ 10이 원래 가격에서 그다지 많이 떨어져 있지 않다는 것을 알 수 있지만 실제로는 할인이 시계보다 20 % 더 큽니다. 따라서 할인율이 가장 높은 제품을 구매하여 저축 / 수익을 올릴 수 있습니다.
사용허드슨 스 베이모든 종류의 브랜드에서 판매량이 많은 백화점은 웹 스크래핑을 사용하여 모든 제품의 원가 및 판매 가격을 확인하고 가장 할인 된 제품을 찾을 예정이었습니다.
웹 사이트를 스크래핑 한 후 900 개가 넘는 제품을 반환했으며, 보시다시피 50 % 이상 할인 된 900 개 제품 중 1 개만 있습니다. 그것이 바로 Perry Ellis Solid Non-Iron Dress Shirt입니다.
이 판매 가격은 제한된 시간 동안 만 제공되므로이 셔츠의 가격은 결국 약 $ 90까지 올라갈 것입니다. 따라서 한정 판매가 종료 될 때 원래 가격보다 $ 30에 $ 60에 판매하는 것보다 지금 $ 40에 사면 $ 20의 수익을 올릴 수 있습니다.
이것은 당신이 이것을하기에 적당한 틈새 시장을 발견한다면, 많은 돈을 벌 수있는 잠재력이있는 방법입니다.
3. 판매 데이터
모든 사람이 무료로 액세스 할 수있는 수백만 개의 데이터 세트가 온라인에 있습니다. 이 데이터는 종종 쉽게 수집되어이를 사용하려는 모든 사람에게 제공됩니다. 반면에 일부 데이터는 가져 오기가 쉽지 않으며 깔끔한 데이터 세트에 넣으려면 시간이나 많은 작업이 필요합니다. 이것은 판매 데이터의 진화가되었습니다. 얻기 어려울 수있는 데이터를 가져 와서 다른 사람들이 특정 비용으로 사용할 수있는 깔끔한 스프레드 시트 또는 대시 보드로 구성하는 데 중점을 두는 회사가 있습니다.
BigDataBall은 한 시즌 분량의 데이터에 대해 $ 30의 가격으로 플레이어 로그, 실황 데이터 및 기타 통계를 판매하는 스포츠 데이터 웹 사이트입니다. 그들이이 가격을 요구할 수있는 이유는이 데이터를 가지고있는 유일한 웹 사이트가 아니라 읽기 쉬운 매우 구조적이고 깨끗한 대시 보드에서이 데이터를 제공하는 유일한 웹 사이트 중 하나이기 때문입니다.
이제 제가 할 것은 BigDataBall이 무료로 가지고있는 것과 동일한 데이터를 가져 와서 이전에했던 것과 같은 구조화 된 데이터 세트에 넣는 것입니다.
앞서 말씀 드린 것처럼 이러한 유형의 데이터를 보유한 사람은 그들뿐이 아닙니다.농구 -Reference.com모든 데이터가 동일하지만 구조화되어 있지 않다는 의미는 데이터가 어디에나 있고 읽기 어렵고 원하는 데이터 세트 만 다운로드 할 수 없다는 의미입니다. 이것이 웹 스크래핑이 들어오는 곳입니다. 저는 각 게임에 대한 모든 플레이어 로그의 웹 사이트를 웹 스크랩하여 BigDataBall과 같은 구조화 된 데이터 세트에 넣을 것입니다.
웹 스크래핑 후농구 -Reference.com지금까지 시즌 동안 16,000 명이 넘는 플레이어 로그를 얻었습니다. 올바른 형식의이 데이터가 수익을 창출 할 수있는 이유를 알 수 있습니다. 올바른 마음을 가진 사람은 16000 개의 데이터 로그를 수동으로 가져 와서 자체 데이터 세트에 넣지 않기 때문입니다. 그러나 웹 스크래핑의 도움으로 우리는이 데이터를 몇 분 안에 얻고 30 달러를 절약 할 수있었습니다.
말할 필요도없이 BigDataBall이하는 일을 할 수 있습니다. 수동으로 얻기 어려운 데이터를 찾아서 컴퓨터가 작업을 수행하도록하고 구조화 된 데이터 세트에 해당 데이터를 보유하는 데 관심이있는 사람들에게 판매하십시오.
결론
모두가 돈을 벌고 싶어하는 세상에서 웹 스크래핑은 돈을 벌 수있는 매우 독특하고 새로운 방법이되었습니다. 적절한 상황에 적용하면 엄청난 돈을 벌 수 있고 대부분의 사람들이 생각하는 것보다 더 쉽게 할 수 있습니다.
Did you know what your reading right now is data. It may just seem like a few words to you but on the back end everything you read online is data that can be taken, picked apart, and manipulated with. Simplified this is what a Web Scraper is. They go through the code that was created to make a website (HTML code) or database and take the data they want. Virtually any website can be scraped . Some sites do involve measures that stop these scrapers from taking their data, but if your good enough you can essentially scrape 99% of websites online.
If you didn’t know what a Web Scraper is, well now you have an idea and we can get to the point of why your reading this article. Money. Web Scraping can be a unique way to make money that isn’t as difficult as it sounds. In fact all the methods and examples I'm going to show you took less than 50 lines of code to make, and can be learned in only a couple of hours. So with that said let me show you...
3 ways to make Money Using Web Scraping
1. Creating Bots
A bot is just a technical term for a program that does a specific action. Depending what you make this action to be, you can sell it to those who don’t have the technical abilities to make it themselves.
To show how you can create a bot and sell it, I created an Airbnb bot. This bot allows the user to input a location and it will return all the houses that Airbnb offers at that location including the price, rating, number of guests allowed, bedrooms, beds, and baths. All of this being done by web scraping the data of each posting on the Airbnb website.
To demonstrate the bot in action I’m going to input a location. Lets say I want to search for Airbnb’s in Rome, Italy. I simply input Rome into the bot, and it returns 272 unique Airbnb’s within seconds in an organized excel spreadsheet.
It is now much easier to see all the houses/features and their comparisons to other postings. It is also much easier to filter through. I live in a family of 4 and if we were to go to Rome we would look for an Airbnb with at least 2 beds at a decent price. Now with this clean organized spreadsheet, excel makes it extremely easy to filter to match my needs. And out of 272 results 7 returned with my matching needs.
Within these 7 the one I would pick is the Vatican St.Peter Daniel, it has a very good rating and is cheapest out of the 7 with a cost of $61 per night. So after I pick the one I want, I would simply copy the link of the posting into a browser and book it then.
Looking for places to stay can be an extremly daunting task when going on vacation, I’m sure most of us have felt that at one time or another. Because of this there are those that are willing to pay just to make this process easier. With this bot I made the process easier. You just saw me book a room with all my matching needs at a good price within 5 minutes.
Trust me people are willing to pay to make their lives just a bit easier.
2. Reselling
One of the most common uses of web scraping, is getting prices off websites. There are those who create web scraping programs that run everyday and return the price of a specific product, and when the price drops to a certain amount the program will automatically buy the product before its sold out. Then since the demand for the product will be higher than the supply they resell the product at a higher price to make a profit. This is just one example of the many reselling tactics that web scrapers use.
Another one which I will show you an example of can save you a lot of money and make a lot for you too.
Every retail website has limited deals and sales, where they will display the original price and the sale price. But what they don’t do is show how much is actually discounted off the original price. For example if a watch originally costs $350 and the sale price is $300 you would think $50 off would be a lot of money but it’s actually only a 14.2% discount. Now if a T-shirt originally costs $50 and the sale price is $40, you might see $10 being not that much off the original price, but in fact the discount is larger than the watch at 20%. Therefore you can save/make money by buying the products with the highest discounted %.
Using Hudson's’ Bay, a department store that has numerous of sales on all kinds of brands, were going to use web scraping to get the original and sale price of all the products and find the product with the highest discount.
After scraping the website it returned over 900 products and as you can see there is only 1 product out of the 900 with over a 50% discount. That would be the Perry Ellis Solid Non-Iron Dress Shirt.
This sale price is only a limited time offer, so the price for this shirt will eventually go back up to around $90. So if I were to buy it now at $40 than sell it at $30 below its original at $60 when the limited sale ends, I would still make a profit of $20.
This is a method where if you find the right niche to do this is in, there is a potential to make a large amount of money.
3. Selling Data
There are millions of datasets online that are free and accessible to everyone. This data is often easily gathered and thereby offered to anyone who wants to use them. On the other hand some data is not as easy to get, and takes either time or a lot of work to put in a nice clean dataset. This has become the evolution of selling data. There are companies that focus on getting data that may be hard to obtain and structuring that data into a nice clean spreadsheet or dashboard that others can use at a certain cost.
BigDataBall is a sports data website that sells player logs, play-by-play data, and other stats at a price of $30 for a single seasons worth of data. The reason they can ask for this price is not because there the only ones that have this data, but there one of the only websites out there that offer this data in a very structured and clean dashboard that is easy to read.
Now what I’m going to do is get the same data as BigDataBall has for free and I’m going to put it into a structured dataset like the ones I did before.
Like I said before they aren’t the only ones with this type of data. Basketball-Reference.com has all the same data but its not structured meaning its data is all over the place and hard to read, and you simply cannot just download the dataset you want. This is where web scraping comes in. I’m going to web scrape the website of all the players logs for each game and put it into a structured dataset like BigDataBall.
After web scraping Basketball-Reference.com we got over 16000 player logs for the season so far. You can see why this data in a nice clean format can be monetized, because no one in their right mind would manually get 16000 logs of data and put it into their own dataset. But with the help of web scraping we were able to get this data in a couple of minutes and save ourselves $30.
Needless to say though you can do what BigDataBall does. Find data that is hard to obtain manually, let your computer do the work, and than sell it to those interested in having that data in a structured dataset.
Conclusion
In the world where everyone wants to make money Web Scraping has become a very unique and new way to make money on the side. Where if you apply it to the right situations it can make you a ton of money, and it is easier to do than most people think.
아침에 한 시간 더 잠을 자고 싶지 않지만 안타깝게도 사무실에서 똑같은 일을해야합니다. 데이터 분석가의 삶은 SQL 쿼리를 실행하여 데이터베이스에서 데이터를 추출하고, 결과 집합을 CSV 파일에 저장하고, 파일에서 데이터를 조작하고, 결과를 나타내는 것입니다.
우리는 종종 데이터베이스에서 데이터를 추출하고 Excel에서 데이터를 조작 한 다음이를 기반으로 적절한 결정을 내리기 위해 다른 팀에 데이터를 보내야하는 올바른 형식으로 최종 데이터를 처리해야하는 일부 작업을 매일 수행합니다. 매일 똑같은 일을하는 것은 지루한 작업이 될 것이며 솔직히 말하면 기술에 가치를 더하지 않을 것입니다.
이 기사에서는 파이썬을 사용하여 자동화하는 방법을 살펴 보겠습니다. 그럼 시작하겠습니다.
전제 조건은 Python 코드를 실행할 수있는 시스템에 anaconda 또는 유사한 IDE가 설치되어 있어야한다는 것입니다.
먼저 데이터를 추출하려는 위치에서 데이터베이스에 대한 연결을 만들어야합니다. 여기에 연결을 만들 것입니다.Vertica(MySQL 데이터베이스 사용 : import mysql.connector). 다음은 데이터베이스에 대한 연결을 생성하기 위해 필요한 코드입니다.
from vertica_python import connectconn_info = {'host': '123.45.67.89', 'port': 5433, 'user': 'Username', 'password': 'password', 'database': 'Schema_name', 'read_timeout': 600, # 10 minutes timeout on queries 'unicode_error': 'strict', # default throw error on invalid UTF-8 results 'ssl': False # SSL is disabled by default }connection = connect(**conn_info)
여기서 host는 데이터베이스가있는 서버의 IP 주소입니다. 이 코드를 실행하면 연결이 설정되고 커서를 만드는 다음 단계로 이동하는 것이 좋습니다. 커서는 데이터베이스와 통신하는 명령문을 실행하는 데 사용됩니다. SQL 문을 실행하고, 프로 시저를 호출하고, 결과 집합에서 모든 데이터를 가져 오는 데 사용됩니다.
cursor = connection.cursor()
커서가 있으면 SQL 쿼리를 실행할 수 있습니다.
cursor.execute("Select * from table_name")
여기서 cursor.execute는 SQL 문에 오류가있는 경우 선택 쿼리를 컴파일하고 구문 오류를 발생시킵니다. 그런 다음 결과 집합에서 모든 레코드를 가져 와서 데이터를 CSV 파일에 저장해야합니다.
import csv with open('output.csv','w') as f: writer = csv.writer(f) writer.writerow([i[0] for i in cursor.description]) for row in cursor.fetchall(): writer.writerow(row)
결과 세트를 CSV 파일로 저장하려면 쓰기 모드로 파일을 열어야합니다 (파일이 있으면 덮어 쓰고 그렇지 않으면 새 파일을 생성합니다).
Cursor.description은 데이터의 헤더를 가져 오는 데 사용됩니다. 여기에서는 For 루프를 사용하여 데이터를 행별로 CSV 파일에 기록합니다. 출력 파일은 현재 작업 디렉토리에서 찾을 수 있습니다.
데이터를 가져온 후 최종 출력을 나타내는 피벗 테이블을 만듭니다. 피벗 테이블을 만들려면 데이터를판다DataFrame.
Who doesn’t want to get an extra hour of sleep in the morning but alas you have to do the same daily tasks of your office. The life of a data analyst is all about executing SQL queries to extract the data from the database, saving the result set into a CSV file, doing data manipulation on the file, and representing the findings.
We often do some tasks daily where we have to pull out the data from the database, do some data manipulation on excel, and then final data in the right format we have to send it to other teams for making appropriate decisions based on that. Doing the same thing on every day basis will become a tedious task and frankly speaking it will not add any value to your skills.
Here in this article, we will see how we can automate that using python. So, let’s get started:
The prerequisite is, you need to have anaconda or any similar IDE installed in your system where you can run your python code.
Firstly we need to create a connection to our database from where we want to extract the data. Here I will be creating a connection to Vertica(for MySQL database use: import mysql.connector). Below is the code you will be needed in order to create a connection to the database.
from vertica_python import connectconn_info = {'host': '123.45.67.89', 'port': 5433, 'user': 'Username', 'password': 'password', 'database': 'Schema_name', 'read_timeout': 600, # 10 minutes timeout on queries 'unicode_error': 'strict', # default throw error on invalid UTF-8 results 'ssl': False # SSL is disabled by default }connection = connect(**conn_info)
Here host will be the IP address of the server where the database resides. Once you execute this code your connection will be set up and you will be good to go to our next step which is to create a cursor. The cursor is used to execute a statement to communicate with the database. It is used to execute SQL statements, call procedures, and fetch all data from the result set.
cursor = connection.cursor()
Once we have our cursor we can execute our SQL query.
cursor.execute("Select * from table_name")
Here cursor.execute will compile your select query and throw out syntax error if you have any error in your SQL statement. After this, we need to fetch all the records from the result set and save the data into a CSV file.
import csv with open('output.csv','w') as f: writer = csv.writer(f) writer.writerow([i[0] for i in cursor.description]) for row in cursor.fetchall(): writer.writerow(row)
For saving our result set into a CSV file we need to open the file in write mode(It will overwrite the file if it exists else will create a new file).
Cursor.description will be used to fetch the header of the data. For loop is used here to write the data row by row into a CSV file. The output file will be found in your current working directory.
After fetching the data we will create a pivot table to represent the final output. To create the pivot table we need to fetch the data into a pandas DataFrame.
시작하는 경우빅 데이터선택할 수있는 많은 도구, 프레임 워크 및 옵션에 압도당하는 것이 일반적입니다. 이 기사에서 나는성분그리고기본 레시피빅 데이터 여정을 시작할 수 있습니다. 제 목표는 다양한 도구를 분류하고 각 도구의 목적과 생태계 내에서 어떻게 적용되는지 설명하는 것입니다.
먼저 몇 가지 고려 사항을 검토하고 실제로빅 데이터 문제.나는 집중할 것이다오픈 소스배포 할 수있는 솔루션온 프레미스. 클라우드 제공 업체는 데이터 요구 사항에 대한 여러 솔루션을 제공하며 이에 대해 약간 언급하겠습니다. 클라우드에서 실행중인 경우 실제로 사용할 수있는 옵션을 확인하고 비용, 운용성, 관리 용이성, 모니터링 및 출시 시간 차원을 살펴 보는 오픈 소스 솔루션과 비교해야합니다.
데이터 고려 사항
(빅 데이터에 대한 경험이 있다면 다음 섹션으로 건너 뛰십시오…)
빅 데이터는 복잡합니다, 당신이 절대적으로 필요하지 않는 한 그것에 뛰어 들지 마십시오. 통찰력을 얻으려면 작게 시작하거나탄력적 검색과프로 메테우스/Grafana정보 수집을 시작하고 대시 보드를 만들어 비즈니스에 대한 정보를 얻을 수 있습니다. 데이터가 확장됨에 따라 이러한 도구는 유지 관리하기에 충분하지 않거나 비용이 너무 많이들 수 있습니다. 이것은 당신이 고려를 시작해야 할 때입니다데이터 레이크 또는 데이터웨어 하우스;시작하기 위해 마음을 바꿔생각큰.
을 체크하다데이터 양, 얼마나 보유하고 있으며 얼마나 오래 보관해야합니까? 을 체크하다온도! 시간이 지남에 따라 가치가 손실되는 경우 데이터를 얼마 동안 저장해야합니까? 얼마나 많은 스토리지 레이어 (핫 / 웜 / 콜드)가 필요합니까? 데이터를 보관하거나 삭제할 수 있습니까?
다른질문다음과 같이 자문 해보십시오. 어떤 유형의 데이터를 저장하고 있습니까? 어떤 형식을 사용하십니까? 법적 의무가 있습니까? 데이터를 얼마나 빨리 수집해야합니까? 쿼리에 사용할 수있는 데이터가 얼마나 빨리 필요합니까? 어떤 유형의 쿼리를 기대하십니까? OLTP 또는 OLAP? 인프라 제한은 무엇입니까? 귀하의 데이터는 어떤 유형입니까? 관계? 그래프? 문서? 시행 할 스키마가 있습니까?
이에 대해 여러 기사를 쓸 수 있습니다. 데이터를 이해하는 것이 매우 중요합니다.경계이 레시피가 작동하려면, 요구 사항, 의무 등이 있습니다.
데이터음량하루에 수십억 개의 이벤트 또는 방대한 데이터 세트를 처리하는 경우 파이프 라인에 빅 데이터 원칙을 적용해야합니다. 하나,"를 구분하는 단일 경계가 없습니다.작은"에서"큰”데이터및 기타 측면속도, 귀하의팀 조직, 크기회사, 필요한 분석 유형,하부 구조아니면 그비즈니스 목표빅 데이터 여정에 영향을 미칠 것입니다. 그중 일부를 검토해 보겠습니다.
OLTP 대 OLAP
몇 년 전, 기업은 사용자 및 기타 구조화 된 데이터를 저장하는 데 사용되는 관계형 데이터베이스 (OLTP). 하룻밤 사이에이 데이터는 복잡한 작업을 사용하여데이터웨어 하우스데이터 분석 및 비즈니스 인텔리전스 (OLAP). 기록 데이터는 데이터웨어 하우스에 복사되어 비즈니스 의사 결정에 사용되는 보고서를 생성하는 데 사용되었습니다.
데이터웨어 하우스와 데이터 레이크
데이터가 증가함에 따라 데이터웨어 하우스는 비용이 많이 들고 관리가 어려워졌습니다. 또한 기업들은 이미지 나 로그와 같은 비정형 데이터를 저장하고 처리하기 시작했습니다. 와빅 데이터, 회사는데이터 레이크구조화 된 데이터와 구조화되지 않은 데이터를 중앙 집중화하여 모든 데이터가 포함 된 단일 저장소를 만듭니다.
간단히 말해 데이터 레이크는 데이터를 저장하는 컴퓨터 노드의 집합입니다.하아파일 시스템및 세트도구데이터를 처리하고 통찰력을 얻을 수 있습니다. 기반지도 축소도구의 거대한 생태계불꽃상용 하드웨어를 사용하여 모든 유형의 데이터를 처리하기 위해 만들어졌습니다.비용 효과적아이디어는 저렴한 하드웨어에서 데이터를 처리하고 저장 한 다음 데이터베이스를 사용하지 않고 나중에 논의 할 파일 형식과 외부 스키마에 의존하여 저장된 파일을 직접 쿼리 할 수 있다는 것입니다. Hadoop은HDFS비용 효율적인 방식으로 데이터를 저장하는 파일 시스템.
에 대한OLTP, 최근 몇 년 동안NoSQL, 데이터베이스 사용MongoDB또는카산드라SQL 데이터베이스의 한계를 넘어 확장 할 수 있습니다. 하나,최근 데이터베이스는 많은 양의 데이터를 처리 할 수 있습니다., OLTP 및 OLAP 모두에 사용할 수 있습니다.스트림 및 배치 처리 모두에 대한 저렴한 비용;같은 트랜잭션 데이터베이스도YugaByteDB엄청난 양의 데이터를 처리 할 수 있습니다. 시스템, 애플리케이션, 소스 및 데이터 유형이 많은 대기업은 분석 요구 사항을 충족하기 위해 데이터웨어 하우스 및 / 또는 데이터 레이크가 필요하지만 회사에 정보 채널이 너무 많지 않거나 클라우드에서 운영하는 경우에는 하나의 대규모 데이터베이스로 충분할 수 있습니다.단순화당신의 아키텍처와 과감하게비용 절감.
Hadoop 또는 No Hadoop
2006 년 출시 이후하둡빅 데이터 세계의 주요 기준이되었습니다. 를 기반으로MapReduce간단한 프로그래밍 모델을 사용하여 많은 양의 데이터를 처리 할 수 있습니다. 생태계는 수년에 걸쳐 기하 급수적으로 성장하여 모든 사용 사례를 처리 할 수있는 풍부한 생태계를 만들었습니다.
최근에 몇 가지비판Hadoop 생태계의 사용이 지난 몇 년 동안 감소하고 있음이 분명합니다. 새로운OLAP자체 데이터 형식을 사용하여 매우 짧은 지연 시간으로 수집 및 쿼리 할 수있는 엔진이 Hadoop에서 가장 일반적인 쿼리 엔진 중 일부를 대체하고 있습니다. 하지만 가장 큰 영향은서버리스 분석빅 데이터 작업을 수행 할 수있는 클라우드 제공 업체에서 출시 한 솔루션인프라 관리없이.
Hadoop 생태계의 규모와 거대한 사용자 기반을 감안할 때, 그것은 죽지 않은 것처럼 보이며 많은 새로운 솔루션은 호환 가능한 API를 만들고 Hadoop 생태계와 통합하는 것 외에는 선택의 여지가 없습니다. HDFS는 생태계의 핵심이지만 클라우드 제공 업체가 더 저렴하고 더 나은 딥 스토리지 시스템을 구축했기 때문에 이제 온 프레미스에서만 사용됩니다.S3또는GCS. 클라우드 제공 업체는 또한관리 형 Hadoop 클러스터상자 밖으로. 따라서 Hadoop은 여전히 살아 있고 시작되지만 Hadoop 생태계 구축을 시작하기 전에 다른 새로운 대안이 있다는 점을 염두에 두어야합니다. 이 기사에서는 어떤 도구가 Hadoop 에코 시스템의 일부인지, 어떤 도구가 호환되는지, 어떤 도구가 Hadoop 에코 시스템의 일부가 아닌지 언급하려고합니다.
배치 대 스트리밍
데이터 온도 분석에 따라 실시간 스트리밍, 일괄 처리 또는 많은 경우에 필요한지 결정해야합니다.양자 모두.
완벽한 세상에서는 실시간으로 실시간 데이터에서 모든 통찰력을 얻고 창 기반 집계를 수행합니다. 그러나 일부 사용 사례에서는 이것이 불가능하고 다른 경우에는 비용 효율적이지 않습니다. 이것이 많은 기업이일괄 처리와 스트림 처리 모두 사용. 비즈니스 요구 사항을 확인하고 자신에게 더 적합한 방법을 결정해야합니다. 예를 들어 일부 보고서를 작성해야하는 경우 일괄 처리로 충분합니다.배치가 더 간단하고 저렴합니다..
최신 처리 엔진은Apache Flink또는Apache Beam, 일컬어4 세대 빅 데이터 엔진, 일괄 처리가 24 시간마다 수행되는 스트림 처리 인 일괄 및 스트리밍 데이터에 대한 통합 프로그래밍 모델을 제공합니다. 이것은 프로그래밍 모델을 단순화합니다.
일반적인 패턴은보고 및 분석을 위해 신용 카드 사기 및 배치와 같은 시간이 중요한 인사이트를위한 스트리밍 데이터를 보유하는 것입니다. 최신 OLAP 엔진을 사용하면 통합 된 방식으로 두 가지를 모두 쿼리 할 수 있습니다.
ETL 대 ELT
사용 사례에 따라 다음을 수행 할 수 있습니다.로드 또는 읽기시 데이터 변환. ELT는 쿼리의 일부로 데이터를 변환하고 집계하는 쿼리를 실행할 수 있음을 의미합니다. SQL을 사용하여 함수를 적용하고, 데이터를 필터링하고, 열 이름을 바꾸고, 뷰를 생성하는 등의 작업을 수행 할 수 있습니다. 이는 BigData OLAP 엔진에서 가능합니다. ELT 방식으로 실시간 및 일괄 쿼리를 수행하는 방법을 제공합니다. 다른 옵션은로드시 데이터를 변환하는 것입니다 (ETL)하지만 처리 중에 조인 및 집계를 수행하는 것은 간단한 작업이 아닙니다. 일반적으로데이터웨어 하우스는 ETL을 사용합니다.고정 된 스키마 (별 또는 눈송이)가 필요한 경향이있는 반면데이터 레이크는 더 유연하고 읽기시 ELT 및 스키마를 수행 할 수 있습니다..
각 방법에는 고유 한 장점과 단점이 있습니다. 요컨대, 읽기에 대한 변환 및 집계는 느리지 만 더 많은 유연성을 제공합니다. 쿼리 속도가 느린 경우 처리 단계에서 사전 조인 또는 집계가 필요할 수 있습니다. 나중에 설명하는 OLAP 엔진은 수집 중에 사전 집계를 수행 할 수 있습니다.
팀 구조 및 방법론
마지막으로회사 정책, 조직, 방법론, 인프라, 팀 구조 및 기술은 빅 데이터 결정에 중요한 역할을합니다.. 예를 들어, 파이프 라인을 생성해야하지만 엄청난 양의 데이터를 처리 할 필요가없는 데이터 문제가있을 수 있습니다.이 경우 수집, 강화 및 변환을 더 쉬운 단일 파이프 라인; 그러나 회사에 이미 데이터 레이크가있는 경우 기존 플랫폼을 사용할 수 있습니다. 이는 처음부터 구축 할 수 없습니다.
또 다른 예는 ETL 대 ELT입니다. 개발자는 데이터를 간단한 형식으로 쿼리 할 준비가 된 ETL 시스템을 구축하는 경향이 있으므로 비 기술 직원이 대시 보드를 구축하고 통찰력을 얻을 수 있습니다. 그러나 강력한 데이터 분석 팀과 소규모 개발자 팀이있는 경우 개발자가 수집에만 집중하는 ELT 접근 방식을 선호 할 수 있습니다. 데이터 분석가는 복잡한 쿼리를 작성하여 데이터를 변환하고 집계합니다. 이는 빅 데이터 여정에서 팀 구조와 기술을 고려하는 것이 얼마나 중요한지 보여줍니다.
데이터는 전체 조직에서 교차 기능적 측면이므로 서로 다른 기술과 배경을 가진 다양한 팀이 함께 작업하는 것이 좋습니다.데이터 레이크는 데이터 거버넌스 및 보안을 유지하면서 손쉬운 협업을 가능하게하는 데 매우 뛰어납니다..
성분
빅 데이터 세계의 여러 측면을 검토 한 후 기본 요소가 무엇인지 살펴 보겠습니다.
정보 저장소)
가장 먼저 필요한 것은 모든 데이터를 저장할 장소입니다. 안타깝게도 고객의 요구에 맞는 단일 제품이 없기 때문에 사용 사례에 따라 적합한 스토리지를 선택해야합니다.
실시간데이터 수집, 실시간 이벤트를 저장하기 위해 추가 로그를 사용하는 것이 일반적입니다. 가장 유명한 엔진은카프카. 대안은Apache펄서. 둘 다 스트리밍 기능을 제공 할뿐만 아니라 이벤트를위한 스토리지도 제공합니다. 이것은 비용 효율적이지 않기 때문에 일반적으로 핫 데이터 (데이터 온도를 기억하십시오!)를위한 단기 저장입니다. 다른 도구가 있습니다.Apache NiFi자체 스토리지가있는 데이터를 수집하는 데 사용됩니다. 결국 추가 로그에서 데이터는 데이터베이스 또는 파일 시스템이 될 수있는 다른 스토리지로 전송됩니다.
대규모 데이터베이스
그러나 Hadoop HDFS는 데이터 레이크를위한 가장 일반적인 형식입니다. 대규모 데이터베이스는 파일 시스템 대신 데이터 파이프 라인의 백엔드로 사용할 수 있습니다. 내 이전 기사 확인대규모 데이터베이스자세한 내용은. 요약하면카산드라,YugaByteDB또는BigTable대량의 데이터를 데이터 레이크보다 훨씬 빠르게 보관하고 처리 할 수 있지만 저렴하지는 않습니다. 그러나 데이터 레이크 파일 시스템과 데이터베이스 간의 가격 격차는 매년 점점 더 작아지고 있습니다. 이것은 당신이 당신의 일부로 고려해야 할 것입니다Hadoop / NoHadoop 결정. 점점 더 많은 기업이 데이터 요구 사항을 위해 데이터 레이크 대신 빅 데이터 데이터베이스를 선택하고 보관 용으로 만 딥 스토리지 파일 시스템을 사용하고 있습니다.
데이터베이스 및 저장소 옵션을 요약하려면Hadoop 생태계 외부고려해야 할 사항은 다음과 같습니다.
카산드라:대량의 데이터를 저장할 수있는 NoSQL 데이터베이스는 최종 일관성과 다양한 구성 옵션을 제공합니다. OLTP에 적합하지만 사전 계산 된 집계 (유연하지 않음)가있는 OLAP에 사용할 수 있습니다. 대안은ScyllaDB훨씬 빠르고 좋습니다.OLAP(고급 스케줄러)
YugaByteDB: 글로벌 트랜잭션을 처리 할 수있는 대규모 관계형 데이터베이스. 관계형 데이터를위한 최상의 옵션입니다.
MongoDB: 강력한 문서 기반 NoSQL 데이터베이스, 수집 (임시 저장) 또는 대시 보드의 빠른 데이터 레이어로 사용 가능
ElasticSearch: 대용량 데이터를 저장할 수있는 분산 형 반전 인덱스. 때때로 많은 사람들이 무시하거나 로그 스토리지로만 사용되는 ElasticSearch는 OLAP 분석, 기계 학습, 로그 스토리지, 비정형 데이터 스토리지 등을 포함한 광범위한 사용 사례에 사용될 수 있습니다. 빅 데이터 생태계에 꼭 필요한 도구입니다.
차이점을 기억하십시오SQL 및 NoSQL,NoSQL 세계에서는 데이터를 모델링하지 않고 쿼리를 모델링합니다.
Hadoop 데이터베이스
HBase가장 인기있는 데이터베이스입니다.Hadoop 생태계 내부. 컬럼 형식으로 많은 양의 데이터를 보유 할 수 있습니다. 기반BigTable.
에 대한데이터 레이크, Hadoop 에코 시스템에서HDFS파일 시스템이 사용됩니다. 그러나 대부분의 클라우드 제공 업체는이를 자체 딥 스토리지 시스템으로 교체했습니다.S3또는GCS.
이러한 파일 시스템 또는 딥 스토리지 시스템은 데이터베이스보다 저렴하지만 기본 스토리지 만 제공하고 강력한산보증.
필요와 예산에 따라 사용 사례에 적합한 스토리지를 선택해야합니다. 예를 들어 예산이 허용되는 경우 수집을 위해 데이터베이스를 사용할 수 있으며 데이터가 변환되면 OLAP 분석을 위해 데이터 레이크에 저장합니다. 또는 관계형 데이터베이스와 같은 빠른 스토리지 시스템에 모든 것을 딥 스토리지에 저장하지만 핫 데이터의 작은 하위 집합을 저장할 수 있습니다.
파일 형식
사용하는 경우 또 다른 중요한 결정HDFS파일을 저장하는 데 사용할 형식입니다. 딥 스토리지 시스템은 데이터를 파일로 저장하고 다른 파일 형식과 압축 알고리즘은 특정 사용 사례에 이점을 제공합니다.데이터 레이크에 데이터를 저장하는 방법은 중요합니다.그리고 당신은 고려할 필요가 있습니다체재,압축특히어떻게분할귀하의 데이터.
데이터 구조: 일부 형식은 JSON, Avro 또는 Parquet와 같은 중첩 데이터를 허용하고 다른 형식은 허용하지 않습니다. 심지어 그렇게하는 사람들은 그것에 대해 고도로 최적화되지 않을 수 있습니다. Avro는 중첩 된 데이터에 가장 효율적인 형식입니다. Parquet 중첩 유형은 매우 비효율적이므로 사용하지 않는 것이 좋습니다. 프로세스 중첩 JSON도 CPU를 많이 사용합니다. 일반적으로 데이터를 수집 할 때 데이터를 평면화하는 것이 좋습니다.
공연: Avro 및 Parquet과 같은 일부 형식은 다른 JSON보다 성능이 뛰어납니다. 다른 사용 사례에 대한 Avro와 Parquet 사이에서도 하나가 다른 것보다 낫습니다. 예를 들어 Parquet는 열 기반 형식이므로 SQL을 사용하여 데이터 레이크를 쿼리하는 것이 좋지만 Avro는 ETL 행 수준 변환에 더 좋습니다.
읽기 쉬운: 데이터를 읽을 사람이 필요한지 고려하십시오. JSON 또는 CSV는 텍스트 형식이며 사람이 읽을 수있는 반면 parquet 또는 Avro와 같은보다 성능이 좋은 형식은 바이너리입니다.
압축: 일부 형식은 다른 형식보다 높은 압축률을 제공합니다.
스키마 진화: 필드 추가 또는 제거는 데이터베이스보다 데이터 레이크에서 훨씬 더 복잡합니다. Avro 또는 Parquet과 같은 일부 형식은 데이터 스키마를 변경하고 데이터를 쿼리 할 수있는 어느 정도의 스키마 진화를 제공합니다. 이러한 도구Delta Lake형식은 스키마 변경을 처리하는 더 나은 도구를 제공합니다.
적합성: JSON 또는 CSV는 널리 채택되어 거의 모든 도구와 호환되며 성능이 높은 옵션은 통합 지점이 적습니다.
보시다시피 CSV 및 JSON은 사용하기 쉽고 사람이 읽을 수있는 일반적인 형식이지만 다른 형식의 기능이 부족하여 데이터 레이크를 쿼리하는 데 너무 느립니다.ORC와 마루Hadoop 생태계에서 널리 사용되어쿼리 데이터이므로AvroHadoop 외부에서도 사용되며, 특히 Kafka와 함께 수집에 사용됩니다.행 레벨 ETL처리. 행 지향 형식은 열 지향 형식보다 더 나은 스키마 진화 기능을 가지고있어 데이터 수집을위한 훌륭한 옵션입니다.
마지막으로 다음 방법도 고려해야합니다.파일의 데이터 압축파일 크기와 CPU 비용 간의 균형을 고려합니다. 일부 압축 알고리즘은 더 빠르지 만 파일 크기가 더 크고 다른 알고리즘은 더 느리지 만 압축률이 더 좋습니다. 자세한 내용은 여기를 확인하십시오조.
CPU 성능이 너무 많이 필요하지 않기 때문에 스트리밍 데이터에 snappy를 사용하는 것이 좋습니다. 배치의 경우 bzip2는 훌륭한 옵션입니다.
다시 말씀 드리지만, 앞서 언급 한 고려 사항을 검토하고 검토 한 모든 측면을 기반으로 결정해야합니다. 몇 가지 사용 사례를 예로 들어 보겠습니다.
사용 사례
ETL 파이프 라인의 일부로 추가 처리를 위해 어딘가에서 실시간 데이터 및 스토리지를 수집해야합니다. 성능이 중요하고 예산이 문제가되지 않는다면 Cassandra를 사용할 수 있습니다. 표준 접근 방식은 최적화 된 형식을 사용하여 HDFS에 저장하는 것입니다.AVRO.
대기 시간이 중요한 (OLTP) 쿼리를 알고있는 고도의 대화 형 사용자 대면 애플리케이션에서 사용할 어딘가에서 데이터와 스토리지를 처리해야합니다. 이 경우 데이터 볼륨에 따라 Cassandra 또는 다른 데이터베이스를 사용하십시오.
처리 된 데이터를 사용자 기반에 제공해야하며 일관성이 중요하며 UI가 고급 쿼리를 제공하기 때문에 쿼리를 미리 알지 못합니다. 이 경우 관계형 SQL 데이터베이스가 필요합니다. 사용자 측에 따라 MySQL과 같은 기존 SQL DB로 충분하거나 YugaByteDB 또는 기타 관계형 대규모 데이터베이스를 사용해야 할 수도 있습니다.
내부 팀이 임시 쿼리를 실행하고 보고서를 만들 수 있도록 OLAP 분석을 위해 처리 된 데이터를 저장해야합니다. 이 경우 데이터를 Parquet 또는 ORC 형식으로 딥 스토리지 파일 시스템에 저장할 수 있습니다.
기록 데이터의 임시 쿼리를 실행하려면 SQL을 사용해야하지만 1 초 이내에 응답해야하는 대시 보드도 필요합니다. 이 경우 MySQL 데이터베이스와 같은 빠른 스토리지에 데이터의 하위 집합을 저장하고 데이터 레이크에 Parquet 형식의 기록 데이터를 저장하는 하이브리드 접근 방식이 필요합니다. 그런 다음 쿼리 엔진을 사용하여 SQL을 사용하여 여러 데이터 원본을 쿼리합니다.
몇 밀리 초 만에 응답해야하는 매우 복잡한 쿼리를 수행해야하며 읽기시 집계를 수행해야 할 수도 있습니다. 이 경우 ElasticSearch를 사용하여 데이터 또는 다음과 같은 최신 OLAP 시스템을 저장하십시오.아파치 피노나중에 논의 할 것입니다.
구조화되지 않은 텍스트를 검색해야합니다. 이 경우 ElasticSearch를 사용하십시오.
하부 구조
현재 인프라는 사용할 도구를 결정할 때 옵션을 제한 할 수 있습니다. 첫 번째 질문은 다음과 같습니다.클라우드 대 온 프레미스. 클라우드 제공 업체는 다양한 옵션과 유연성을 제공합니다. 또한 관리 및 모니터링이 더 쉬운 빅 데이터 요구 사항에 대한 서버리스 솔루션을 제공합니다. 확실히 클라우드는 빅 데이터를위한 장소입니다. Hadoop 에코 시스템에서도클라우드 제공 업체는 관리 형 클러스터를 제공합니다.온 프레미스보다 스토리지가 저렴합니다. 클라우드 솔루션에 관한 다른 기사를 확인하십시오.
실행중인 경우온 프레미스다음에 대해 생각해야합니다.
내 워크로드는 어디에서 실행합니까?명확히Kubernetes또는Apache메 소스통합 된 오케스트레이션 프레임 워크를 제공하여 통합 된 방식으로 애플리케이션을 실행합니다. 배포, 모니터링 및 경고 측면은 사용하는 프레임 워크에 관계없이 동일합니다. 반면 베어 메탈에서 실행하는 경우 배포의 모든 교차 절단 측면을 생각하고 관리해야합니다. 이 경우 관리되는 클러스터 및 도구가 라이브러리 및 프레임 워크보다 더 적합합니다.
어떤 유형의 하드웨어가 있습니까?빠른 SSD와 고급 서버를 갖춘 특수 하드웨어가 있다면 Cassandra와 같은 방대한 데이터베이스를 배포하고 뛰어난 성능을 얻을 수 있습니다. 상용 하드웨어 만 소유하고 있다면 Hadoop 에코 시스템이 더 나은 옵션이 될 것입니다. 이상적으로는 다양한 워크로드에 대해 여러 유형의 서버를 보유하고자합니다. Cassandra에 대한 요구 사항은 HDFS와 크게 다릅니다.
모니터링 및 경고
다음 요소는 데이터 파이프 라인의 성공에 필수적입니다. 빅 데이터 세계에서지속적인 피드백이 필요합니다프로세스와 데이터에 대해. 당신은메트릭 수집, 로그 수집,시스템을 모니터링하고경고,대시 보드그리고 훨씬 더.
클라우드 공급자 기능 활용for monitoring and alerting when possible. Depending on your platform you will use a different set of tools. For Cloud Serverless platform you will rely on your cloud provider tools and best practices. For Kubernetes, you will use open source monitor solutions or enterprise integrations. I really recommend this 웹 사이트다양한 솔루션을 찾아보고 확인하고 자신 만의APM해결책.
Another thing to consider in the Big Data world is auditability and accountability. Because of different regulations, you may be required to trace the data, capturing and recording every change as data flows through the pipeline. This is called data provenance or lineage. Tools like Apache Atlas are used to control, record and govern your data. Other tools such Apache NiFi데이터 계보를 즉시 지원합니다. 에 대한실시간 추적,검사개방형 원격 측정또는저격병.또한 많은 클라우드 서비스가 있습니다.Datadog.
아파치 레인저Hadoop 플랫폼을위한 통합 보안 모니터링 프레임 워크를 제공합니다. 중앙 UI에서 모든 보안 관련 작업을 관리 할 수있는 중앙 집중식 보안 관리를 제공합니다. 그것은 제공합니다권한 부여다양한 방법을 사용하고 전체 Hadoop 플랫폼에서 완전한 감사 기능을 사용합니다.
사람들
당신의 팀은 성공의 열쇠입니다. 빅 데이터 엔지니어는 찾기 어려울 수 있습니다. 교육, 숙련도 향상, 워크샵에 투자하십시오. 사일로와 관용구를 제거하고 반복을 간단하게 만들고 사용Domain Driven Design팀 경계와 책임을 설정합니다.
For Big Data you will have 두 가지 넓은 범주:
데이터 엔지니어섭취, 농축 및 변형을 위해. 이 엔지니어들은강력한 개발 및 운영 배경and are in charge of creating the data pipeline. Developers, Administrators, DevOps specialists, etc will fall in this category.
Data Scientist: These can be BI specialists, data analysts, etc. in charge of generation reports, dashboards and gathering insights. Focused on OLAP and with strong business understanding, these people gather the data which will be used to make critical business decisions. SQL에 강함 and visualization but weak in software development. 기계 학습 specialists may also fall into this category.
Budget
이것은 중요한 고려 사항이며 다른 모든 재료를 구입하려면 돈이 필요하며 제한된 자원입니다. 무제한의 돈이 있다면 방대한 데이터베이스를 배포하여 많은 복잡성없이 빅 데이터 요구 사항에 사용할 수 있지만 비용이 많이 듭니다. 따라서이 기사에서 언급 한 각 기술은 사용, 배포 및 유지 관리 할 수있는 기술을 가진 사람이 필요합니다. 일부 기술은 다른 기술보다 더 복잡하므로이 점을 고려해야합니다.
Recipe
이제 재료가 준비 되었으니 빅 데이터 레시피를 만들어 보겠습니다. 안에nutshell과정은 간단합니다. 다른 소스에서 데이터를 수집하고, 보강하고, 어딘가에 저장하고, 메타 데이터 (스키마)를 저장하고, 정리하고, 정규화하고, 처리하고, 잘못된 데이터를 격리하고, 데이터를 최적으로 집계하고, 최종적으로 다운 스트림 시스템에서 사용할 어딘가에 저장해야합니다. .
각 단계에 대해 좀 더 자세히 살펴 보겠습니다.
Ingestion
The first step is to get the data,이 단계의 목표는 필요한 모든 데이터를 가져와 단일 저장소에 원시 형식으로 저장하는 것입니다.This is usually owned by other teams who push their data into Kafka or a data store.
For simple pipelines with not huge amounts of data you can build a simple microservices workflow that can ingest, enrich and transform the data in a single pipeline(ingestion + transformation), you may use tools such Apache Airflow to orchestrate the dependencies. However, for Big Data it is recommended that you separate ingestion from processing, massive processing engines that can run in parallel are not great to handle blocking calls, retries, back pressure, etc. So, it is recommended that all the data is saved before you start processing it. You should enrich your data as part of the ingestion by calling other systems to make sure all the data, including reference data has landed into the lake before processing.
There are two modes of ingestion:
Pull: Pull the data from somewhere like a database, file system, a queue or an API
Push: Applications can also push data into your lake but it is always recommended to have a messaging platform as Kafka in between. A common pattern is Change Data Capture(CDC) which allows us to move data into the lake in real time from databases and other systems.
As we already mentioned, It is extremely common to useKafka or Pulsaras a mediator for your data ingestion to enable persistence, back pressure, parallelization and monitoring of your ingestion. Then, use Kafka Connect to save the data into your data lake. The idea is that your OLTP systems will publish events to Kafka and then ingest them into your lake. Avoid ingesting data in batch directly through APIs; you may call HTTP end-points for data enrichment but remember that ingesting data from APIs it’s not a good idea in the big data world because it is slow, error prone(network issues, latency…) and can bring down source systems. Although, APIs are great to set domain boundaries in the OLTP world, these boundaries are set by data stores(batch) or topics(real time) in Kafka in the Big Dataworld. Of course, it always depends on the size of your data but try to use Kafka or Pulsar when possible and if you do not have any other options; pull small amounts of data in a streaming fashion from the APIs, not in batch. For databases, use tools such Debezium to stream data to Kafka (CDC).
To minimize dependencies, it is always easier if the source system push data to Kafka rather than your team pulling the data since you will be tightly coupled with the other source systems. If this is not possible and you still need to own the ingestion process, we can look at two broad categories for ingestion:
Un Managed Solutions: These are applications that you develop to ingest data into your data lake; you can run them anywhere. This is very common when ingesting data from APIs or other I/O blocking systems that do not have an out of the box solution, or when you are not using the Hadoop ecosystem. The idea is to use streaming libraries to ingest data from different topics, end-points, queues, or file systems. Because you are developing apps, you have full flexibility. Most libraries provide retries, back pressure, monitoring, batching and much more. This is a code yourself approach, so you will need other tools for orchestration and deployment. You get more control and better performance but more effort involved. You can have a single monolith or microservices communicating using a service bus or orchestrated using an external tool. Some of the libraries available are Apache Camel or Akka Ecosystem(Akka HTTP + Akka Streams + Akka Cluster + Akka Persistence + Alpakka). You can deploy it as a monolith or as microservices depending on how complex is the ingestion pipeline. If you use Kafka or Pulsar, you can use them as ingestion orchestration tools to get the data and enrich it. Each stage will move data to a new topic creating a DAGin the infrastructure itself by using topics for dependency management. If you do not have Kafka and you want a more visual workflow you can use Apache Airflow to orchestrate the dependencies and run the DAG. The idea is to have a series of services that ingest and enrich the date and then, store it somewhere. After each step is complete, the next one is executed and coordinated by Airflow. Finally, the data is stored in some kind of storage.
Managed Solutions:이 경우 클러스터에 배포되고 수집에 사용되는 도구를 사용할 수 있습니다. 이는 다음과 같은 도구가있는 Hadoop 에코 시스템에서 일반적입니다.Sqoop to ingest data from your OLTP databases and 플룸 to ingest streaming data. These tools provide monitoring, retries, incremental load, compression and much more.
NiFi is one of these tools that are difficult to categorize. It is a beast on its own. It can be used for ingestion, orchestration and even simple transformations. So in theory, it could solve simple Big Data problems. It is a managed solution. It has a visual interface구성 요소를 드래그 앤 드롭하고이를 사용하여 데이터를 수집하고 강화할 수 있습니다. 그것은 가지고있다over 300 built in processors which perform many tasks and you can extend it by implementing your own.
It has its own architecture, so it does not use any database HDFS but it has integrations with many tools in the Hadoop Ecosystem. You can call APIs, integrate with Kafka, FTP, many file systems and cloud storage. You can manage the data flow performing routing, filtering and basic ETL. For some use cases, NiFi may be all you need.
그러나 NiFi는 클러스터에서 10 개 이상의 노드 간 통신이 비효율적이기 때문에 특정 지점 이상으로 확장 할 수 없습니다. 수직적으로 더 잘 확장되는 경향이 있지만 특히 복잡한 ETL의 경우 한계에 도달 할 수 있습니다. 그러나 Spark와 같은 도구와 통합하여 데이터를 처리 할 수 있습니다.NiFi is a great tool for ingesting and enriching your data.
현대OLAP engines such 드루이드 or 피노또한 배치 및 스트리밍 데이터의 자동 수집을 제공합니다. 이에 대해서는 다른 섹션에서 설명하겠습니다.
You can also do some initial validation and data cleaning during the ingestion, as long as they are not expensive computations or do not cross over the bounded context, remember that a null field may be irrelevant to you but important for another team.
The last step is to decide where to land the data, we already talked about this. You can use a database or a deep storage system. For a data lake, it is common to store it in HDFS, the format will depend on the next step; if you are planning to perform row level operations, Avro훌륭한 옵션입니다. Avro는 또한외부 레지스트리which will allow you to change the schema for your ingested data relatively easily.
메타 데이터
데이터를 저장 한 후 다음 단계는 메타 데이터 (데이터 자체에 대한 정보)를 저장하는 것입니다. 가장 일반적인 메타 데이터는schema. By using an external metadata repository, the different tools in your data lake or data pipeline can query it to infer the data schema.
If you use Avro for raw data, then the external registry좋은 선택입니다. 이렇게하면 처리에서 수집을 쉽게 분리 할 수 있습니다.
데이터가 수집되면 OLAP 엔진에서 쿼리하기 위해 사용하는 것이 매우 일반적입니다. SQL DDL. The most used data lake/data warehouse tool in the Hadoop ecosystem is Apache Hive,which provides a metadata store so you can use the data lake like a data warehouse with a defined schema. You can run SQL queries on top of Hive and connect many other tools such SparkSQL 쿼리를 실행하려면Spark SQL. Hive는 Hadoop 생태계 내에서 중요한 도구입니다.중앙 집중식 메타 데이터베이스분석 쿼리를 위해. 기타 도구Apache TajoHive 위에 구축되어 데이터 레이크에서 데이터웨어 하우징 기능을 제공합니다.
Apache Impala원주민이다분석 데이터베이스 for Hadoop which provides metadata store, you can still connect to Hive for metadata using Hcatalog.
Apache Phoenixhas also a metastore and can work with Hive. Phoenix focuses on OLTP트랜잭션에 대한 ACID 속성을 사용하여 쿼리를 활성화합니다. 유연하고 다음을 활용하여 NoSQL 세계의 스키마 읽기 기능을 제공합니다.HBase as its backing store. Apache드루이드또는피노메타 데이터 저장소도 제공합니다.
가공
이 단계의 목표는단일 스키마를 사용하여 데이터를 정리, 정규화, 처리 및 저장합니다.최종 결과는잘 정의 된 스키마가있는 신뢰할 수있는 데이터 세트.
일반적으로 다음과 같은 처리를 수행해야합니다.
Validation: 데이터 유효성 검사 및 불량 데이터는 별도의 저장소에 저장하여 격리합니다. 데이터 품질 요구 사항에 따라 특정 임계 값에 도달하면 경고를 보냅니다.
랭 글링 및 클렌징: 데이터를 정리하고 추가 처리를 위해 다른 형식으로 저장합니다 (예 : 비효율적 인 JSON을 Avro로 대체).
표준화과표준화가치의
Rename필드
…
목표는trusted data set that later can be used for downstream systems. This is a key role of a data engineer. This can be done in a stream or batch fashion.
파이프 라인 처리는 다음과 같이 나눌 수 있습니다.세 단계 in case of 일괄 처리:
전처리 단계: 원시 데이터가 깨끗하지 않거나 올바른 형식이 아닌 경우 사전 처리해야합니다. 이 단계에는 몇 가지 기본 유효성 검사가 포함되지만 목표는효율적으로 처리 할 데이터 준비다음 단계를 위해. 이 단계에서는 다음을 시도해야합니다.데이터를 평면화하고 이진 형식으로 저장그런 Avro. 이렇게하면 추가 처리 속도가 빨라집니다. 아이디어는 다음 단계에서 행 수준 작업을 수행하고 중첩 쿼리는 비용이 많이 들기 때문에 지금 데이터를 평면화하면 다음 단계 성능이 향상된다는 것입니다.
신뢰할 수있는 단계: Data is 검증, 정리, 정규화 및 변환 to a common schema stored in 하이브. The goal is to create a trusted common data set understood by the data owners. Typically, a data 사양데이터 엔지니어의 역할은 사양과 일치하도록 변환을 적용하는 것입니다. 최종 결과는쪽매 세공쉽게 쿼리 할 수있는 형식입니다. 올바른 파티션을 선택하고 데이터를 최적화하여 내부 쿼리를 수행하는 것이 중요합니다. 쿼리 성능을 향상시키기 위해이 단계에서 일부 집계를 부분적으로 미리 계산할 수 있습니다.
보고 단계:이 단계는 선택 사항이지만 종종 필수입니다. 안타깝게도 데이터 레이크를 사용할 때a single schema will not serve all use cases; 이것은 데이터웨어 하우스와 데이터 레이크의 한 가지 차이점입니다. HDFS 쿼리는 데이터베이스 또는 데이터웨어 하우스만큼 효율적이지 않으므로 추가 최적화가 필요합니다. 이 단계에서는 다음을 수행해야 할 수 있습니다.비정규 화서로 다른 이해 관계자가 더 효율적으로 쿼리 할 수 있도록 서로 다른 파티션을 사용하여 데이터를 저장합니다. 아이디어는견해다양한 다운 스트림 시스템 (데이터 마트). In this phase you can also compute aggregations if you do not use an OLAP engine (see next section). The trusted phase does not know anything about who will query the data,이 단계는 소비자를 위해 데이터를 최적화합니다.. 클라이언트가 매우 상호 작용적인 경우 다음을 수행 할 수 있습니다.빠른 저장 계층 도입이 단계에서는 빠른 쿼리를위한 관계형 데이터베이스와 같습니다. 또는 나중에 논의 할 OLAP 엔진을 사용할 수 있습니다.
스트리밍의 경우 논리는 동일하지만 정의 된 DAG 내에서 스트리밍 방식으로 실행됩니다. Spark를 사용하면 스트림을 기록 데이터와 조인 할 수 있지만한계. 나중에 논의 할 것입니다.OLAP engines, 실시간 데이터를 기록 데이터와 병합하는 데 더 적합합니다.
Processing Frameworks
처리에 사용할 수있는 도구는 다음과 같습니다.
Apache Spark: 이것은 일괄 처리를위한 가장 잘 알려진 프레임 워크입니다. Hadoop 에코 시스템의 일부입니다.관리놀라운 제공 클러스터parallelism, 모니터링 및 훌륭한 UI. 또한 스트림 처리 (구조적 스트리밍). 기본적으로 Spark는 메모리에서 MapReduce 작업을 실행하여 일반 MapReduce 성능의 최대 100 배까지 증가합니다. Hive와 통합하여SQLHive 테이블, 뷰를 생성하거나 데이터를 쿼리하는 데 사용할 수 있습니다. 그것은 많은 통합을 가지고 있으며 다양한 형식을 지원하며 거대한 커뮤니티를 가지고 있습니다. 모든 클라우드 제공 업체에서 지원합니다. 실행할 수 있습니다.실Hadoop 클러스터의 일부로, Kubernetes 및 기타 플랫폼에서도 마찬가지입니다. SQL 또는 기계 학습과 같은 특정 사용 사례를위한 많은 라이브러리가 있습니다.
Apache Flink: The first engine to unify batch and streaming but heavily focus on 스트리밍. Kafka와 같은 마이크로 서비스의 백본으로 사용할 수 있습니다. 실행할 수 있습니다.실Hadoop 클러스터의 일부이지만 처음부터 Kubernetes 또는 Mesos와 같은 다른 플랫폼에 최적화되었습니다. 그것은매우 빠름실시간 스트리밍을 제공하므로 Spark보다 나은 옵션입니다.low latency 스트림 처리, 특히상태 저장 streams. It also has libraries for SQL, Machine Learning and much more.
Apache Storm: Apache Storm은 무료 오픈 소스 분산 실시간 계산 시스템으로 스트리밍에 중점을 두며 Hadoop 생태계의 관리 솔루션 부분입니다. 확장 가능하고 내결함성이 있으며 데이터 처리를 보장하며 설정 및 작동이 쉽습니다.
Apache Samza: 또 다른 훌륭한 상태 저장 스트림 처리 엔진. Samza를 사용하면 Apache Kafka를 비롯한 여러 소스의 데이터를 실시간으로 처리하는 상태 저장 애플리케이션을 빌드 할 수 있습니다. YARN 위에서 실행되는 Hadoop 생태계의 관리 형 솔루션 부분입니다.
Apache Beam: Apache Beam은 엔진 자체가 아니라사양의unified programming model다른 모든 엔진을 통합합니다. 다음과 함께 사용할 수있는 프로그래밍 모델을 제공합니다.다른 언어들, 따라서 개발자는 빅 데이터 파이프 라인을 다룰 때 새로운 언어를 배울 필요가 없습니다. 그런 다음 플러그다른 백엔드클라우드 또는 온 프레미스에서 실행할 수있는 처리 단계에 사용됩니다. Beam은 앞서 언급 한 모든 엔진을 지원하며 클라우드, YARN, Mesos, Kubernetes 등 모든 플랫폼에서 쉽게 전환하고 실행할 수 있습니다. 새 프로젝트를 시작하는 경우 데이터 파이프 라인이 미래를 대비할 수 있도록 Beam으로 시작하는 것이 좋습니다.
이 처리 단계가 끝날 때까지 데이터를 요리했고 이제 사용할 준비가되었습니다!하지만 요리를하려면 요리사가 그의 팀과 협력해야합니다.
관현악법
Data pipeline orchestration is a cross cutting process which manages the dependencies between all the other tasks. If you use stream processing, you need to orchestrate the dependencies of each streaming app, for batch, you need to schedule and orchestrate the jobs.
작업 및 응용 프로그램이 실패 할 수 있으므로 다음 방법이 필요합니다.시간표, 일정 변경,다시 하다, 감시 장치, 다시 해 보다통합 된 방식으로 전체 데이터 파이프 라인을 디버깅합니다.
새로운 프레임 워크Dagster또는지사더 많은 기능을 추가하고 파이프 라인에 의미를 추가하는 데이터 자산을 추적 할 수 있습니다.
일부옵션아르:
Apache Oozie: Oozie 그것은스케줄러Hadoop의 경우 작업은 DAG로 생성되며 시간 또는 데이터 가용성에 따라 트리거 될 수 있습니다. 다음과 같은 수집 도구와 통합되어 있습니다.SqoopSpark와 같은 프레임 워크를 처리합니다.
Apache Airflow: Airflow는schedule, run and monitor workflows. DAG를 사용하여 복잡한 워크 플로를 만듭니다. 그래프의 각 노드는 작업이며 간선은 작업 간의 종속성을 정의합니다. Airflow 스케줄러는 사용자가 설명하는 지정된 종속성을 따르는 동안 작업자 배열에서 작업을 실행합니다. 최대화를 위해 DAG를 생성합니다.병행. DAG는파이썬,이를 통해 로컬에서 실행하고 단위 테스트하고 개발 워크 플로와 통합 할 수 있습니다. 그것은 또한 지원합니다SLA 및 경고.루이지유사한 기능을 가진 Airflow의 대안이지만 Airflow는 Luigi보다 더 많은 기능을 가지고 있으며 더 잘 확장됩니다.
Dagster머신 러닝, 분석 및 ETL을위한 최신 오케 스트레이터입니다. 주요 차이점은 다음과 유사하게 데이터의 입력 및 출력을 추적 할 수 있다는 것입니다.Apache NiFi데이터 흐름 솔루션을 만듭니다. 작업의 일부로 다른 값을 구체화 할 수도 있습니다. 또한 여러 작업을 병렬로 실행할 수 있으며 매개 변수 추가, 테스트 및 간단한 버전 관리 등을 제공합니다. 아직 미성숙하고 데이터를 추적해야한다는 사실 때문에 확장이 어려울 수 있으며 이는 NiFi와 공유되는 문제입니다.
지사Dagster와 유사하며 로컬 테스트, 버전 관리, 매개 변수 관리 등을 제공합니다. Prefect를 나머지와 다른 점은기류의 한계개선 된 스케줄러, 매개 변수화 된 워크 플로우, 동적 워크 플로우, 버전 관리 및 개선 된 테스트와 같은 실행 엔진. 핵심 오픈 소스 워크 플로 관리 시스템과구름설정이 전혀 필요하지 않은 제품입니다.
Apache NiFi: NiFi는 또한 작업을 예약하고, 모니터링하고, 데이터를 라우팅하고, 경고 등을 할 수 있습니다. 데이터 흐름에 중점을 두지 만 일괄 처리도 가능합니다. Hadoop 외부에서 실행되지만 Spark 작업을 트리거하고 HDFS / S3에 연결할 수 있습니다.
요컨대, 요구 사항이 데이터 공유가 필요하지 않은 독립적 인 작업을 조정하는 것이라면 Airflow 또는 Ozzie를 사용하십시오. 데이터 계보 및 추적이 필요한 데이터 흐름 애플리케이션의 경우 개발자가 아닌 경우 NiFi를 사용하고 개발자를위한 Dagster 또는 Prefect를 사용합니다.
데이터 품질
빅 데이터의 중요한 측면 중 하나는 데이터 품질과 보증입니다. 기업은 데이터 품질 문제로 인해 매년 엄청난 돈을 잃습니다. 문제는 이것이 여전히 데이터 과학 분야에서 미성숙 한 분야이고 개발자들은이 분야에서 수십 년 동안 작업 해 왔으며 다음과 같은 훌륭한 테스트 프레임 워크와 방법론을 가지고 있다는 것입니다.BDD또는TDD,하지만 파이프 라인을 어떻게 테스트합니까?
이 분야에는 두 가지 일반적인 문제가 있습니다.
오해 된 요구 사항: 종종 변환 및 오케스트레이션 논리가 매우 복잡해질 수 있습니다. 비즈니스 분석가는 종종 실수를 저지르고 기술적으로 정확하지만 요구 사항이 잘못된 솔루션을 계획, 개발, 테스트 및 배포하는 개발자가 해석해야하는 도메인 언어를 사용하여 요구 사항을 작성할 수 있습니다. 이러한 유형의 오류는 비용이 많이 듭니다.
데이터 유효성 검사: 파이프 라인 테스트는 코드와 상당히 다릅니다. 소프트웨어를 개발할 때 기능을 테스트하는 것은 결정론적인 블랙 박스 테스트입니다. 주어진 입력에 대해 항상 동일한 출력을 얻습니다. 데이터 자산의 경우 테스트는 더 복잡합니다. 데이터 유형, 값, 제약 조건 등을 주장해야합니다. 또한 집계를 적용하여 데이터 세트를 확인하여 행 또는 열의 수가 올바른지 확인해야합니다. 예를 들어, 언젠가 데이터 크기가 10 % 감소했는지 또는 특정 값이 올바르게 채워 졌는지 감지하기가 매우 어렵습니다.
기업은 데이터 품질 및 테스트와 관련하여 아직 초기 단계에 있습니다., this creates a 막대한 기술적 부채. 나는 이것을 확인하는 것이 좋습니다조자세한 내용은.
이러한 문제를 완화하려면 다음을 따르십시오.DDD principles and make sure that boundaries are set and a common language is used. Use frameworks that support data lineage like NiFi or Dagster.
데이터 품질에 중점을 둔 일부 도구는 다음과 같습니다.
Apache Griffin: Hadoop 에코 시스템의 일부인이 도구는 다양한 관점에서 데이터 품질을 측정하는 통합 프로세스를 제공하여 신뢰할 수있는 데이터 자산을 구축하는 데 도움을줍니다. 데이터에 대한 어설 션을 생성하고 파이프 라인의 일부로 검증하는 데 사용할 수있는 DSL을 제공합니다. Spark와 통합됩니다. 데이터 세트에 대한 규칙 및 어설 션을 추가 한 다음 Spark 작업으로 유효성 검사를 실행할 수 있습니다. 그리핀의 문제점은 DSL이 관리하기 어려워지고 (JSON) 기술이 아닌 사람이 해석하기 어렵 기 때문에 오해 된 요구 사항 문제를 해결하지 못한다는 사실입니다.
큰 기대:이것은 작성된 새로운 도구입니다파이썬데이터 품질, 파이프 라인 테스트 및 품질 보증에 중점을 둡니다. Airflow 또는 기타 오케스트레이션 도구와 쉽게 통합 할 수 있으며 자동화 된 데이터 유효성 검사를 제공합니다. 이 도구를 차별화하는 것은human readable데이터 분석가, BA 및 개발자가 사용할 수 있습니다. 직관적 인 UI뿐만 아니라 완전 자동화를 제공하므로 프로덕션 파이프 라인의 일부로 유효성 검사를 실행하고 멋진 결과를 볼 수 있습니다.UI. 기술적 인 사람이 아닌 사람이 주장을 작성할 수 있습니다.노트북 which provide documentation and formal requirements that developers can easily understand, translate to code and use for testing. BAs or testers write the data assertions (기대) 모든 사람이보고 확인할 수 있도록 UI에서 사람이 읽을 수있는 테스트로 변환됩니다. 또한 데이터 프로파일 링을 수행하여 일부 어설 션을 생성 할 수 있습니다. 온 프레미스 또는 클라우드에서 데이터베이스 또는 파일 시스템에 직접 연결할 수 있습니다. 사용 및 관리가 매우 쉽습니다. 기대치를 소스 코드 리포지토리에 커밋 한 다음 파이프 라인에 통합 할 수 있습니다.Great Expectations는 데이터 품질에 관련된 모든 당사자를위한 공통 언어와 프레임 워크를 만듭니다., 그것을 만들기대단히파이프 라인 자동화 및 테스트 용이최소한의 노력으로.
Query your data
Now that you have your cooked recipe, it is time to finally get the value from it. By this point, you have your data stored in your data lake using some deep storage such HDFSParquet 또는 OLAP와 같은 쿼리 가능한 형식database.
데이터를 쿼리하는 데 사용되는 다양한 도구가 있으며 각 도구에는 장단점이 있습니다. 그들 대부분은OLAP그러나 OLTP에 최적화 된 것은 거의 없습니다. 일부는 표준 형식을 사용하고 쿼리 실행에만 집중하는 반면 다른 일부는 자체 형식 / 스토리지를 사용하여 처리를 소스로 푸시하여 성능을 향상시킵니다. 일부는 별표 또는 눈송이 스키마를 사용하여 데이터웨어 하우징에 최적화 된 반면 다른 일부는 더 유연합니다. 요약하면 다음과 같은 다양한 고려 사항이 있습니다.
데이터웨어 하우스와 데이터 레이크
Hadoop vs Standalone
OLAP vs OLTP
쿼리 엔진 대 OLAP 엔진
쿼리 기능이있는 처리 엔진도 고려해야합니다.
처리 엔진
이전 섹션에서 설명한 대부분의 엔진은 다음과 같은 메타 데이터 서버에 연결할 수 있습니다.Hive and run queries, create views, etc. This is a common use case to create refined reporting layers.
Spark SQLSQL 쿼리를 Spark 프로그램과 원활하게 혼합하는 방법을 제공하므로DataFrameSQL을 사용하는 API. JDBC 또는 ODBC를 통한 Hive 통합 및 표준 연결이 있습니다. 그래서 당신은 연결할 수 있습니다Tableau,Looker또는 Spark를 통해 데이터에 BI 도구를 추가합니다.
Apache Flink또한 제공합니다SQLAPI. Flink의 SQL 지원은Apache CalciteSQL 표준을 구현합니다. 또한 다음과 통합됩니다.하이브통해HiveCatalog. For example, users can store their Kafka or ElasticSearch tables in Hive Metastore by using HiveCatalog, and reuse them later on in SQL queries.
쿼리 엔진
이러한 유형의 도구는 쿼리에 중점을 둡니다.통합 된 방식으로 다양한 데이터 소스 및 형식. The idea is to query your data lake using SQL queries like if it was a relational database, although it has some limitations. Some of these tools can also query NoSQL databases and much more. These tools provide a JDBC interface for external tools, such as Tableau or Looker, 안전한 방식으로 데이터 레이크에 연결합니다.쿼리 엔진은 가장 느린 옵션이지만 최대한의 유연성을 제공합니다.
Apache Pig: Hive와 함께 첫 번째 쿼리 언어 중 하나였습니다. SQL과 다른 자체 언어가 있습니다. Pig 프로그램의 두드러진 특성은 구조가 상당히병렬화, which in turns enables them to handle very large data sets. It is now in decline in favor of newer SQL based engines.
프레스토 악장: 페이스 북에서 오픈 소스로 출시, 오픈 소스분산 SQL 쿼리 엔진모든 크기의 데이터 소스에 대해 대화 형 분석 쿼리를 실행합니다. Presto를 사용하면 Hive, Cassandra, 관계형 데이터베이스 및 파일 시스템을 포함하여 데이터가있는 곳에서 쿼리 할 수 있습니다. 대용량 데이터 세트에 대한 쿼리를 몇 초 만에 수행 할 수 있습니다. Hadoop과 독립적이지만 대부분의 도구, 특히 Hive와 통합하여 SQL 쿼리를 실행합니다.
Apache Drill: Provides a schema-free SQL Query Engine for Hadoop, NoSQL and even cloud storage. It is independent of Hadoop but has many integrations with the ecosystem tools such Hive. A single query can join data from multiple datastores performing optimizations specific to each data store. It is very good at allowing analysts to treat any data like a table, even if they are reading a file under the hood. Drill은 완전한 표준 SQL을 지원합니다. 비즈니스 사용자, 분석가 및 데이터 과학자는 다음과 같은 표준 BI / 분석 도구를 사용할 수 있습니다.Tableau,Qlik및 Excel은 Drill의 JDBC 및 ODBC 드라이버를 활용하여 비 관계형 데이터 저장소와 상호 작용합니다. 또한 개발자는 맞춤형 애플리케이션에서 Drill의 간단한 REST API를 활용하여 멋진 시각화를 만들 수 있습니다.
OLTP Databases
Although, Hadoop is optimized for OLAP there are still some options if you want to perform OLTP queries for an interactive application.
HBase확장 할 수 있도록 만들어졌고 ACID 기능을 즉시 제공하지 않기 때문에 설계 상 매우 제한된 ACID 속성을 갖지만 일부 OLTP 시나리오에 사용할 수 있습니다.
Apache PhoenixHBase를 기반으로 구축되었으며 Hadoop 에코 시스템에서 OTLP 쿼리를 수행하는 방법을 제공합니다. Apache Phoenix는 Spark, Hive, Pig, Flume 및 Map Reduce와 같은 다른 Hadoop 제품과 완전히 통합됩니다. 또한 메타 데이터를 저장할 수 있으며 DDL 명령을 통해 테이블 생성 및 버전 별 증분 변경을 지원합니다. 꽤fast, faster than using Drill or other query engine.
You may use any massive scale database outside the Hadoop ecosystem such as Cassandra, YugaByteDB, ScyllaDB for OTLP.
Finally, it is very common to have a subset of the data, usually the most recent, in a fast database of any type such MongoDB or MySQL. The 쿼리 엔진 mentioned above can join data between slow and fast data storage in a single query.
분산 검색 인덱스
These tools provide a way to store and search unstructured text data and they live outside the Hadoop ecosystem since they need special structures to store the data. The idea is to use an inverted index to perform fast lookups. Besides text search, this technology can be used for a wide range of use cases like storing logs, events, etc. There are two main options:
Solr: Apache를 기반으로 구축 된 인기 있고 빠른 속도의 오픈 소스 엔터프라이즈 검색 플랫폼입니다.Lucene. Solr is reliable, scalable and fault tolerant, providing distributed indexing, replication and load-balanced querying, automated failover and recovery, centralized configuration and more. It is great for text search but its use cases are limited compared to ElasticSearch.
ElasticSearch: It is also a very popular distributed index but it has grown into its own ecosystem which covers many use cases like APM, search, text storage, analytics, dashboards, machine learning and more. It is definitely a tool to have in your toolbox either for DevOps or for your data pipeline since it is very versatile. It can also store and search videos and images.
ElasticSearch로 사용할 수 있습니다 fast storage layer for your data lake for advanced search functionality. If you store your data in a key-value massive database, like HBase or Cassandra, which provide very limited search capabilities due to the lack of joins; you can put ElasticSearch in front to perform queries, return the IDs and then do a quick lookup on your database.
그것은 또한 사용할 수 있습니다analytics; 데이터를 내보내고 색인을 생성 한 다음Kibana, 대시 보드, 보고서 등을 생성하고 히스토그램, 복잡한 집계를 추가하고 데이터 위에 기계 학습 알고리즘을 실행할 수도 있습니다. Elastic Ecosystem은 거대하고 탐험 할 가치가 있습니다.
OLAP 데이터베이스
In this category we have databases which may also provide a metadata store for schemas and query capabilities. Compared to query engines, these tools also provide storage and may enforce certain schemas in case of data warehouses (star schema). These tools use SQL syntax and Spark and other frameworks can interact with them.
Apache Hive: We already discussed Hive as a central schema repository for Spark and other tools so they can use SQL, but Hive can also store data, so you can use it as a data warehouse. It can access HDFS or HBase. When querying Hive it leverages on Apache Tez, Apache Spark, or MapReduce, Tez 또는 Spark가 훨씬 빠릅니다. 또한 HPL-SQL이라는 절차 언어도 있습니다.
Apache Impala: It is a native분석 데이터베이스 for Hadoop, that you can use to store data and query it in an efficient manner. It can connect to Hive for metadata using Hcatalog. Impala provides 짧은 지연 시간과 높은 동시성Hadoop의 BI / 분석 쿼리 용 (Apache Hive와 같은 배치 프레임 워크에서 제공되지 않음). Impala는 또한 다중 테넌트 환경에서도 선형 적으로 확장되므로 Hive보다 쿼리를위한 더 나은 대안이됩니다. Impala는 인증을 위해 기본 Hadoop 보안 및 Kerberos와 통합되므로 데이터 액세스를 안전하게 관리 할 수 있습니다. 그것은 사용합니다HBase and HDFS for data storage.
Apache Tajo: 또 다른data warehouse for Hadoop. Tajo is designed for low-latency and scalable ad-hoc queries, online aggregation, and ETL on large-data sets stored on HDFS and other data sources. It has integration with 하이브메타 스토어 to access the common schemas. It has many query optimizations, it is scalable, fault tolerant and provides a JDBC interface.
Apache Kylin: Apache Kylin is a newer distributed Analytical Data Warehouse. Kylin is extremely fast, so it can be used to complement some of the other databases like Hive for use cases where 공연다음과 같이 중요합니다.dashboards or interactive reports, it is probably the best OLAP data warehouse but it is more difficult to use, another problem is that because of the high dimensionality, you need more storage. The idea is that if query engines or Hive are not fast enough, you can create a “입방체” in Kylin which is a multidimensional table optimized for OLAP with 사전 계산대시 보드 또는 대화 형 보고서에서 쿼리 할 수있는 값입니다. Spark에서 직접 큐브를 만들 수 있으며 Kafka에서 거의 실시간으로도 만들 수 있습니다.
OLAP Engines
In this category, I include newer engines that are an evolution of the previous OLAP databases which provide more functionality creating an all-in-one analytics platform. Actually, they are a 잡종이전 두 카테고리 중인덱싱OLAP 데이터베이스에. 그들은 Hadoop 플랫폼 외부에 있지만 긴밀하게 통합되어 있습니다. 이 경우 일반적으로 처리 단계를 건너 뛰고 이러한 도구를 사용하여 직접 수집합니다.
그들은 문제를 해결하려고실시간 및 과거 데이터 쿼리 in an uniform way, so you can immediately query real-time data as soon as it’s available alongside historical data with low latency so you can build interactive applications and dashboards. These tools allow in many cases to query the raw data with almost no transformation in an ELT패션이지만 일반 OLAP 데이터베이스보다 우수한 성능을 제공합니다.
공통점은unified view of the data, real time and batch data ingestion, distributed indexing, its own data format, SQL support, JDBC interface, hot-cold data support, multiple integrations 그리고metadata store.
Apache Druid: It is the most famous real time OLAP engine. It focused on time series data but it can be used for any kind of data. It uses its own columnar format데이터를 크게 압축 할 수 있으며 다음과 같은 많은 최적화 기능이 내장되어 있습니다.inverted indices, text encoding, automatic data roll up and much more. Data is ingested in real time using 평온 or Kafka which has very low latency, data is kept in memory in a row format optimized for writes but as soon as it arrives is available to be query just like previous ingested data. A background task in in charge of moving the data asynchronously to a deep storage system such HDFS. When data is moved to deep storage it is converted into smaller chunks partitioned by time called segments지연 시간이 짧은 쿼리에 최적화되어 있습니다. 각 세그먼트에는 집계를 필터링하고 수행하는 데 사용할 수있는 여러 차원 인 타임 스탬프가 있습니다. 및 사전 계산 된 집계 인 메트릭입니다. 일괄 처리의 경우 데이터를 세그먼트에 직접 저장합니다. 푸시 및 풀 섭취를 지원합니다. 그것은 가지고있다integrations와하이브, 스파크and even NiFi.Hive 메타 스토어를 사용할 수 있으며 Druid에서 사용하는 JSON 쿼리로 변환되는 Hive SQL 쿼리를 지원합니다. Hive 통합은 JDBC를 지원하므로 모든 BI 도구를 연결할 수 있습니다. 또한 자체 메타 데이터 저장소 (일반적으로 MySQL)도 있습니다. 방대한 양의 데이터를 수집하고 매우 잘 확장 할 수 있습니다. 주요 문제는 구성 요소가 많고difficult to manage and deploy.
Apache Pinot: It is a newer alternative to Druid open sourced by LinkedIn. Compared to Druid, it offers 낮은 지연 thanks to the 스타 트리부분적인 사전 계산을 제공하는 인덱스로 사용자 대면 앱에 사용할 수 있습니다 (LinkedIn 피드를 가져 오는 데 사용됨). 그것은정렬 된 색인 instead of inverted index which is faster. It has an extendable plugin architecture and also has many integrations but does not support Hive. It also unifies batch and real time, provides fast ingestion, smart index and stores the data in segments. It is easier to deploy and faster compared to Druid but it is a bit immature at the moment.
클릭 하우스: Written in C++, this engine provides incredible performance for OLAP queries, especially aggregations. It looks like a relational database so you can model the data very easily. It is very easy to set up and has many integrations.
이것을 확인하십시오article세 엔진을 자세히 비교합니다. 다시 말하지만, 작게 시작하여 결정을 내리기 전에 데이터를 파악하십시오. 이러한 새로운 엔진은강력하지만 사용하기 어렵다. 몇 시간을 기다릴 수 있다면 일괄 처리와 Hive 또는 Tajo와 같은 데이터베이스를 사용하십시오. 그런 다음 Kylin을 사용하여 OLAP 쿼리를 가속화하여보다 대화 형으로 만듭니다. 충분하지 않고 더 짧은 지연 시간과 실시간 데이터가 필요한 경우 OLAP 엔진을 고려하십시오. Druid는 실시간 분석에 더 적합합니다. Kylin은 OLAP 사례에 더 중점을 둡니다. Druid는 실시간 스트리밍으로 Kafka와 잘 통합되어 있습니다. Kylin은 Hive 또는 Kafka에서 일괄 적으로 데이터를 가져옵니다. 실시간 수집은 가까운 장래에 계획되어 있습니다.
Finally, Greenplum더 많은 기능을 갖춘 또 다른 OLAP 엔진입니다.AI에 집중.
마지막으로심상 you have several commercial tools such Qlik,보는 사람또는Tableau. For Open Source, check SuperSet, an amazing tool that support all the tools we mentioned, has a great editor and it is really fast. 메타베이스 or 매다른 훌륭한 옵션입니다.
결론
우리는데이터: 다양한 모양, 형식, 처리 방법, 저장 방법 등. 생각해 내다:데이터와 비즈니스 모델 파악. 반복적 인 프로세스를 사용하고빅 데이터 플랫폼 구축을 천천히 시작하십시오; 새로운 프레임 워크를 도입하는 것이 아니라올바른 질문을하고 올바른 답변을 제공하는 최고의 도구를 찾습니다.
데이터에 대한 다양한 고려 사항을 검토하고 데이터 모델 (SQL), 쿼리 (NoSQL), 인프라 및 예산에 따라 적절한 스토리지를 선택하십시오. 기억해클라우드 제공 업체와 협력빅 데이터 (구매 대 빌드)에 대한 클라우드 제공을 평가합니다. 로 시작하는 것은 매우 일반적입니다.서버리스분석 파이프 라인을 사용하고 비용이 증가함에 따라 천천히 오픈 소스 솔루션으로 이동합니다.
데이터 수집은 중요하고 복잡합니다.제어 할 수없는 시스템에 대한 종속성으로 인해; 이러한 종속성을 관리하고 신뢰할 수있는 데이터 흐름을 만들어 데이터를 적절하게 수집합니다. 가능한 경우 다른 팀이 데이터 수집을 소유하도록합니다. 데이터를 추적하려면 측정 항목, 로그 및 추적을 추가해야합니다. 스키마 진화를 활성화하고 플랫폼에 적절한 보안을 설정했는지 확인하십시오.
작업에 적합한 도구 사용씹을 수있는 것보다 더 많이 섭취하지 마십시오. Cassandra, Druid 또는 ElasticSearch와 같은 도구는 놀라운 기술이지만 제대로 사용하고 관리하려면 많은 지식이 필요합니다. 임시 쿼리 및 보고서에 대한 OLAP 일괄 분석 만 필요한 경우 Hive 또는 Tajo를 사용합니다. 더 나은 성능이 필요하면 Kylin을 추가하십시오. 다른 데이터 소스와 조인해야하는 경우 Drill 또는 Presto와 같은 쿼리 엔진을 추가합니다. 또한 실시간 및 일괄 쿼리가 필요한 경우 ClickHouse, Druid 또는 Pinot를 사용하십시오.
If you are starting with Big Data it is common to feel overwhelmed by the large number of tools, frameworks and options to choose from. In this article, I will try to summarize the ingredients and the basic recipe to get you started in your Big Data journey. My goal is to categorize the different tools and try to explain the purpose of each tool and how it fits within the ecosystem.
First let’s review some considerations and to check if you really have aBig Data problem. I will focus on open source solutions that can be deployed on-prem. Cloud providers provide several solutions for your data needs and I will slightly mention them. If you are running in the cloud, you should really check what options are available to you and compare to the open source solutions looking at cost, operability, manageability, monitoring and time to market dimensions.
Data Considerations
(If you have experience with big data, skip to the next section…)
Big Data is complex, do not jump into it unless you absolutely have to. To get insights, start small, maybe use Elastic Search and Prometheus/Grafana to start collecting information and create dashboards to get information about your business. As your data expands, these tools may not be good enough or too expensive to maintain. This is when you should start considering a data lake or data warehouse; and switch your mind set to start thinkingbig.
Check the volume of your data, how much do you have and how long do you need to store for. Check the temperature! of the data, it loses value over time, so how long do you need to store the data for? how many storage layers(hot/warm/cold) do you need? can you archive or delete data?
Other questions you need to ask yourself are: What type of data are your storing? which formats do you use? do you have any legal obligations? how fast do you need to ingest the data? how fast do you need the data available for querying? What type of queries are you expecting? OLTP or OLAP? What are your infrastructure limitations? What type is your data? Relational? Graph? Document? Do you have an schema to enforce?
I could write several articles about this, it is very important that you understand your data, set boundaries, requirements, obligations, etc in order for this recipe to work.
Data volume is key, if you deal with billions of events per day or massive data sets, you need to apply Big Data principles to your pipeline. However, there is not a single boundary that separates “small” from “big” data and other aspects such as the velocity, your team organization, the size of the company, the type of analysis required, the infrastructure or the business goals will impact your big data journey. Let’s review some of them…
OLTP vs OLAP
Several years ago, businesses used to have online applications backed by a relational database which was used to store users and other structured data(OLTP). Overnight, this data was archived using complex jobs into a data warehouse which was optimized for data analysis and business intelligence(OLAP). Historical data was copied to the data warehouse and used to generate reports which were used to make business decisions.
Data Warehouse vs Data Lake
As data grew, data warehouses became expensive and difficult to manage. Also, companies started to store and process unstructured data such as images or logs. With Big Data, companies started to create data lakes to centralize their structured and unstructured data creating a single repository with all the data.
In short, a data lake it’s just a set of computer nodes that store data in a HAfile system and a set of tools to process and get insights from the data. Based on Map Reduce a huge ecosystem of tools such Spark were created to process any type of data using commodity hardware which was more cost effective.The idea is that you can process and store the data in cheap hardware and then query the stored files directly without using a database but relying on file formats and external schemas which we will discuss later. Hadoop uses the HDFS file system to store the data in a cost effective manner.
For OLTP, in recent years, there was a shift towards NoSQL, using databases such MongoDB or Cassandra which could scale beyond the limitations of SQL databases. However, recent databases can handle large amounts of data and can be used for both , OLTP and OLAP, and do this at a low cost for both stream and batch processing; even transactional databases such as YugaByteDB can handle huge amounts of data. Big organizations with many systems, applications, sources and types of data will need a data warehouse and/or data lake to meet their analytical needs, but if your company doesn’t have too many information channels and/or you run in the cloud, a single massive database could suffice simplifying your architecture and drastically reducing costs.
Hadoop or No Hadoop
Since its release in 2006, Hadoop has been the main reference in the Big Data world. Based on the MapReduce programming model, it allowed to process large amounts of data using a simple programming model. The ecosystem grew exponentially over the years creating a rich ecosystem to deal with any use case.
Recently, there has been some criticism of the Hadoop Ecosystem and it is clear that the use has been decreasing over the last couple of years. New OLAP engines capable of ingesting and query with ultra low latency using their own data formats have been replacing some of the most common query engines in Hadoop; but the biggest impact is the increase of the number of Serverless Analytics solutions released by cloud providers where you can perform any Big Data task without managing any infrastructure.
Given the size of the Hadoop ecosystem and the huge user base, it seems to be far from dead and many of the newer solutions have no other choice than create compatible APIs and integrations with the Hadoop Ecosystem. Although HDFS is at the core of the ecosystem, it is now only used on-prem since cloud providers have built cheaper and better deep storage systems such S3 or GCS. Cloud providers also provide managed Hadoop clusters out of the box. So it seems, Hadoop is still alive and kicking but you should keep in mind that there are other newer alternatives before you start building your Hadoop ecosystem. In this article, I will try to mention which tools are part of the Hadoop ecosystem, which ones are compatible with it and which ones are not part of the Hadoop ecosystem.
Batch vs Streaming
Based on your analysis of your data temperature, you need to decide if you need real time streaming, batch processing or in many cases, both.
In a perfect world you would get all your insights from live data in real time, performing window based aggregations. However, for some use cases this is not possible and for others it is not cost effective; this is why many companies use both batch and stream processing. You should check your business needs and decide which method suits you better. For example, if you just need to create some reports, batch processing should be enough. Batch is simpler and cheaper.
The latest processing engines such Apache Flink or Apache Beam, also known as the 4th generation of big data engines, provide a unified programming model for batch and streaming data where batch is just stream processing done every 24 hours. This simplifies the programming model.
A common pattern is to have streaming data for time critical insights like credit card fraud and batch for reporting and analytics. Newer OLAP engines allow to query both in an unified way.
ETL vs ELT
Depending on your use case, you may want to transform the data on load or on read. ELT means that you can execute queries that transform and aggregate data as part of the query, this is possible to do using SQL where you can apply functions, filter data, rename columns, create views, etc. This is possible with Big Data OLAP engines which provide a way to query real time and batch in an ELT fashion. The other option, is to transform the data on load(ETL) but note that doing joins and aggregations during processing it’s not a trivial task. In general, data warehouses use ETL since they tend to require a fixed schema (star or snowflake) whereas data lakes are more flexible and can do ELT and schema on read.
Each method has its own advantages and drawbacks. In short, transformations and aggregation on read are slower but provide more flexibility. If your queries are slow, you may need to pre join or aggregate during processing phase. OLAP engines discussed later, can perform pre aggregations during ingestion.
Team Structure and methodology
Finally, your company policies, organization, methodologies, infrastructure, team structure and skills play a major role in your Big Data decisions. For example, you may have a data problem that requires you to create a pipeline but you don’t have to deal with huge amount of data, in this case you could write a stream application where you perform the ingestion, enrichment and transformation in a single pipeline which is easier; but if your company already has a data lake you may want to use the existing platform, which is something you wouldn’t build from scratch.
Another example is ETL vs ELT. Developers tend to build ETL systems where the data is ready to query in a simple format, so non technical employees can build dashboards and get insights. However, if you have a strong data analyst team and a small developer team, you may prefer ELT approach where developers just focus on ingestion; and data analysts write complex queries to transform and aggregate data. This shows how important it is to consider your team structure and skills in your big data journey.
It is recommended to have a diverse team with different skills and backgrounds working together since data is a cross functional aspect across the whole organization. Data lakes are extremely good at enabling easy collaboration while maintaining data governance and security.
Ingredients
After reviewing several aspects of the Big Data world, let’s see what are the basic ingredients.
Data (Storage)
The first thing you need is a place to store all your data. Unfortunately, there is not a single product to fit your needs that’s why you need to choose the right storage based on your use cases.
For real time data ingestion, it is common to use an append log to store the real time events, the most famous engine is Kafka. An alternative is ApachePulsar. Both, provide streaming capabilities but also storage for your events. This is usually short term storage for hot data(remember about data temperature!) since it is not cost efficient. There are other tools such Apache NiFi used to ingest data which have its own storage. Eventually, from the append log the data is transferred to another storage that could be a database or a file system.
Massive Databases
Hadoop HDFS is the most common format for data lakes, however; large scale databases can be used as a back end for your data pipeline instead of a file system; check my previous article on Massive Scale Databasesfor more information. In summary, databases such Cassandra, YugaByteDB or BigTable can hold and process large amounts of data much faster than a data lake can but not as cheap; however, the price gap between a data lake file system and a database is getting smaller and smaller each year; this is something that you need to consider as part of your Hadoop/NoHadoop decision. More and more companies are now choosing a big data database instead of a data lake for their data needs and using deep storage file system just for archival.
To summarize the databases and storage options outside of the Hadoop ecosystem to consider are:
Cassandra: NoSQL database that can store large amounts of data, provides eventual consistency and many configuration options. Great for OLTP but can be used for OLAP with pre computed aggregations (not flexible). An alternative is ScyllaDB which is much faster and better for OLAP (advanced scheduler)
YugaByteDB: Massive scale Relational Database that can handle global transactions. Your best option for relational data.
MongoDB: Powerful document based NoSQL database, can be used for ingestion(temp storage) or as a fast data layer for your dashboards
ElasticSearch: Distributed inverted index that can store large amounts of data. Sometimes ignored by many or just used for log storage, ElasticSearch can be used for a wide range of use cases including OLAP analysis, machine learning, log storage, unstructured data storage and much more. Definitely a tool to have in your Big Data ecosystem.
Remember the differences between SQL and NoSQL, in the NoSQL world, you do not model data, you model your queries.
Hadoop Databases
HBase is the most popular data base inside the Hadoop ecosystem. It can hold large amount of data in a columnar format. It is based on BigTable.
For data lakes, in the Hadoop ecosystem, HDFS file system is used. However, most cloud providers have replaced it with their own deep storage system such S3 or GCS.
These file systems or deep storage systems are cheaper than data bases but just provide basic storage and do not provide strong ACID guarantees.
You will need to choose the right storage for your use case based on your needs and budget. For example, you may use a database for ingestion if you budget permit and then once data is transformed, store it in your data lake for OLAP analysis. Or you may store everything in deep storage but a small subset of hot data in a fast storage system such as a relational database.
File Formats
Another important decision if you use a HDFS is what format you will use to store your files. Note that deep storage systems store the data as files and different file formats and compression algorithms provide benefits for certain use cases. How you store the data in your data lake is critical and you need to consider the format, compression and especially how you partition your data.
Some things to consider when choosing the format are:
The structure of your data: Some formats accept nested data such JSON, Avro or Parquet and others do not. Even, the ones that do, may not be highly optimized for it. Avro is the most efficient format for nested data, I recommend not to use Parquet nested types because they are very inefficient. Process nested JSON is also very CPU intensive. In general, it is recommended to flat the data when ingesting it.
Performance: Some formats such Avro and Parquet perform better than other such JSON. Even between Avro and Parquet for different use cases one will be better than others. For example, since Parquet is a column based format it is great to query your data lake using SQL whereas Avro is better for ETL row level transformation.
Easy to read: Consider if you need people to read the data or not. JSON or CSV are text formats and are human readable whereas more performant formats such parquet or Avro are binary.
Compression: Some formats offer higher compression rates than others.
Schema evolution: Adding or removing fields is far more complicated in a data lake than in a database. Some formats like Avro or Parquet provide some degree of schema evolution which allows you to change the data schema and still query the data. Tools such Delta Lake format provide even better tools to deal with changes in Schemas.
Compatibility: JSON or CSV are widely adopted and compatible with almost any tool while more performant options have less integration points.
As we can see, CSV and JSON are easy to use, human readable and common formats but lack many of the capabilities of other formats, making it too slow to be used to query the data lake. ORC and Parquet are widely used in the Hadoop ecosystem to query data whereas Avro is also used outside of Hadoop, especially together with Kafka for ingestion, it is very good for row level ETL processing. Row oriented formats have better schema evolution capabilities than column oriented formats making them a great option for data ingestion.
Lastly, you need to also consider how to compress the data in your files considering the trade off between file size and CPU costs. Some compression algorithms are faster but with bigger file size and others slower but with better compression rates. For more details check this article.
I recommend using snappy for streaming data since it does not require too much CPU power. For batch bzip2 is a great option.
Again, you need to review the considerations that we mentioned before and decide based on all the aspects we reviewed. Let’s go through some use cases as an example:
Use Cases
You need to ingest real time data and storage somewhere for further processing as part of an ETL pipeline. If performance is important and budget is not an issue you could use Cassandra. The standard approach is to store it in HDFS using an optimized format as AVRO.
You need to process your data and storage somewhere to be used by a highly interactive user facing application where latency is important (OLTP), you know the queries in advance. In this case use Cassandra or another database depending on the volume of your data.
You need to serve your processed data to your user base, consistency is important and you do not know the queries in advance since the UI provides advanced queries. In this case you need a relational SQL data base, depending on your side a classic SQL DB such MySQL will suffice or you may need to use YugaByteDB or other relational massive scale database.
You need to store your processed data for OLAP analysis for your internal team so they can run ad-hoc queries and create reports. In this case, you can store the data in your deep storage file system in Parquet or ORC format.
You need to use SQL to run ad-hoc queries of historical data but you also need dashboards that need to respond in less than a second. In this case you need a hybrid approach where you store a subset of the data in a fast storage such as MySQL database and the historical data in Parquet format in the data lake. Then, use a query engine to query across different data sources using SQL.
You need to perform really complex queries that need to respond in just a few milliseconds, you also may need to perform aggregations on read. In this case, use ElasticSearch to store the data or some newer OLAP system like Apache Pinot which we will discuss later.
You need to search unstructured text. In this case use ElasticSearch.
Infrastructure
Your current infrastructure can limit your options when deciding which tools to use. The first question to ask is: Cloud vs On-Prem. Cloud providers offer many options and flexibility. Furthermore, they provide Serverless solutions for your Big Data needs which are easier to manage and monitor. Definitely, the cloud is the place to be for Big Data; even for the Hadoop ecosystem, cloud providers offer managed clusters and cheaper storage than on premises. Check my other articles regarding cloud solutions.
If you are running on premises you should think about the following:
Where do I run my workloads? Definitely Kubernetes or Apache Mesosprovide a unified orchestration framework to run your applications in a unified way. The deployment, monitoring and alerting aspects will be the same regardless of the framework you use. In contrast, if you run on bare metal, you need to think and manage all the cross cutting aspects of your deployments. In this case, managed clusters and tools will suit better than libraries and frameworks.
What type of hardware do I have? If you have specialized hardware with fast SSDs and high-end servers, then you may be able to deploy massive databases like Cassandra and get great performance. If you just own commodity hardware, the Hadoop ecosystem will be a better option. Ideally, you want to have several types of servers for different workloads; the requirements for Cassandra are far different from HDFS.
Monitoring and Alerting
The next ingredient is essential for the success of your data pipeline. In the big data world, you need constant feedback about your processes and your data. You need to gather metrics, collect logs, monitor your systems, create alerts, dashboards and much more.
Use open source tools like Prometheus and Grafana for monitor and alerting. Use log aggregation technologies to collect logs and store them somewhere like ElasticSearch.
Leverage on cloud providers capabilities for monitoring and alerting when possible. Depending on your platform you will use a different set of tools. For Cloud Serverless platform you will rely on your cloud provider tools and best practices. For Kubernetes, you will use open source monitor solutions or enterprise integrations. I really recommend this website where you can browse and check different solutions and built your own APM solution.
Another thing to consider in the Big Data world is auditability and accountability. Because of different regulations, you may be required to trace the data, capturing and recording every change as data flows through the pipeline. This is called data provenance or lineage. Tools like Apache Atlas are used to control, record and govern your data. Other tools such Apache NiFi supports data lineage out of the box. For real time traces, check Open Telemetry or Jaeger. There are also a lot of cloud services suchDatadog.
Apache Rangerprovides a unified security monitoring framework for your Hadoop platform. Provides centralized security administration to manage all security related tasks in a central UI. It provides authorization using different methods and also full auditability across the entire Hadoop platform.
People
Your team is the key to success. Big Data Engineers can be difficult to find. Invest in training, upskilling, workshops. Remove silos and red tape, make iterations simple and use Domain Driven Design to set your team boundaries and responsibilities.
For Big Data you will have two broad categories:
Data Engineers for ingestion, enrichment and transformation. These engineers have a strong development and operational background and are in charge of creating the data pipeline. Developers, Administrators, DevOps specialists, etc will fall in this category.
Data Scientist: These can be BI specialists, data analysts, etc. in charge of generation reports, dashboards and gathering insights. Focused on OLAP and with strong business understanding, these people gather the data which will be used to make critical business decisions. Strong in SQL and visualization but weak in software development. Machine Learning specialists may also fall into this category.
Budget
This is an important consideration, you need money to buy all the other ingredients, and this is a limited resource. If you have unlimited money you could deploy a massive database and use it for your big data needs without many complications but it will cost you. So each technology mentioned in this article requires people with the skills to use it, deploy it and maintain it. Some technologies are more complex than others, so you need to take this into account.
Recipe
Now that we have the ingredients, let’s cook our big data recipe. In a nutshell the process is simple; you need to ingest data from different sources, enrich it, store it somewhere, store the metadata(schema), clean it, normalize it, process it, quarantine bad data, optimally aggregate data and finally store it somewhere to be consumed by downstream systems.
Let’s have a look a bit more in detail to each step…
Ingestion
The first step is to get the data, the goal of this phase is to get all the data you need and store it in raw format in a single repository. This is usually owned by other teams who push their data into Kafka or a data store.
For simple pipelines with not huge amounts of data you can build a simple microservices workflow that can ingest, enrich and transform the data in a single pipeline(ingestion + transformation), you may use tools such Apache Airflow to orchestrate the dependencies. However, for Big Data it is recommended that you separate ingestion from processing, massive processing engines that can run in parallel are not great to handle blocking calls, retries, back pressure, etc. So, it is recommended that all the data is saved before you start processing it. You should enrich your data as part of the ingestion by calling other systems to make sure all the data, including reference data has landed into the lake before processing.
There are two modes of ingestion:
Pull: Pull the data from somewhere like a database, file system, a queue or an API
Push: Applications can also push data into your lake but it is always recommended to have a messaging platform as Kafka in between. A common pattern is Change Data Capture(CDC) which allows us to move data into the lake in real time from databases and other systems.
As we already mentioned, It is extremely common to useKafka or Pulsaras a mediator for your data ingestion to enable persistence, back pressure, parallelization and monitoring of your ingestion. Then, use Kafka Connect to save the data into your data lake. The idea is that your OLTP systems will publish events to Kafka and then ingest them into your lake. Avoid ingesting data in batch directly through APIs; you may call HTTP end-points for data enrichment but remember that ingesting data from APIs it’s not a good idea in the big data world because it is slow, error prone(network issues, latency…) and can bring down source systems. Although, APIs are great to set domain boundaries in the OLTP world, these boundaries are set by data stores(batch) or topics(real time) in Kafka in the Big Dataworld. Of course, it always depends on the size of your data but try to use Kafka or Pulsar when possible and if you do not have any other options; pull small amounts of data in a streaming fashion from the APIs, not in batch. For databases, use tools such Debezium to stream data to Kafka (CDC).
To minimize dependencies, it is always easier if the source system push data to Kafka rather than your team pulling the data since you will be tightly coupled with the other source systems. If this is not possible and you still need to own the ingestion process, we can look at two broad categories for ingestion:
Un Managed Solutions: These are applications that you develop to ingest data into your data lake; you can run them anywhere. This is very common when ingesting data from APIs or other I/O blocking systems that do not have an out of the box solution, or when you are not using the Hadoop ecosystem. The idea is to use streaming libraries to ingest data from different topics, end-points, queues, or file systems. Because you are developing apps, you have full flexibility. Most libraries provide retries, back pressure, monitoring, batching and much more. This is a code yourself approach, so you will need other tools for orchestration and deployment. You get more control and better performance but more effort involved. You can have a single monolith or microservices communicating using a service bus or orchestrated using an external tool. Some of the libraries available are Apache Camel or Akka Ecosystem(Akka HTTP + Akka Streams + Akka Cluster + Akka Persistence + Alpakka). You can deploy it as a monolith or as microservices depending on how complex is the ingestion pipeline. If you use Kafka or Pulsar, you can use them as ingestion orchestration tools to get the data and enrich it. Each stage will move data to a new topic creating a DAGin the infrastructure itself by using topics for dependency management. If you do not have Kafka and you want a more visual workflow you can use Apache Airflow to orchestrate the dependencies and run the DAG. The idea is to have a series of services that ingest and enrich the date and then, store it somewhere. After each step is complete, the next one is executed and coordinated by Airflow. Finally, the data is stored in some kind of storage.
Managed Solutions: In this case you can use tools which are deployed in your cluster and used for ingestion. This is common in the Hadoop ecosystem where you have tools such Sqoop to ingest data from your OLTP databases and Flume to ingest streaming data. These tools provide monitoring, retries, incremental load, compression and much more.
NiFi is one of these tools that are difficult to categorize. It is a beast on its own. It can be used for ingestion, orchestration and even simple transformations. So in theory, it could solve simple Big Data problems. It is a managed solution. It has a visual interface where you can just drag and drop components and use them to ingest and enrich data. It has over 300 built in processors which perform many tasks and you can extend it by implementing your own.
It has its own architecture, so it does not use any database HDFS but it has integrations with many tools in the Hadoop Ecosystem. You can call APIs, integrate with Kafka, FTP, many file systems and cloud storage. You can manage the data flow performing routing, filtering and basic ETL. For some use cases, NiFi may be all you need.
However, NiFi cannot scale beyond a certain point, because of the inter node communication more than 10 nodes in the cluster become inefficient. It tends to scale vertically better, but you can reach its limit, especially for complex ETL. However, you can integrate it with tools such Spark to process the data. NiFi is a great tool for ingesting and enriching your data.
Modern OLAP engines such Druid or Pinot also provide automatic ingestion of batch and streaming data, we will talk about them in another section.
You can also do some initial validation and data cleaning during the ingestion, as long as they are not expensive computations or do not cross over the bounded context, remember that a null field may be irrelevant to you but important for another team.
The last step is to decide where to land the data, we already talked about this. You can use a database or a deep storage system. For a data lake, it is common to store it in HDFS, the format will depend on the next step; if you are planning to perform row level operations, Avro is a great option. Avro also supports schema evolution using an external registry which will allow you to change the schema for your ingested data relatively easily.
Metadata
The next step after storing your data, is save its metadata (information about the data itself). The most common metadata is the schema. By using an external metadata repository, the different tools in your data lake or data pipeline can query it to infer the data schema.
If you use Avro for raw data, then the external registry is a good option. This way you can easily de couple ingestion from processing.
Once the data is ingested, in order to be queried by OLAP engines, it is very common to use SQL DDL. The most used data lake/data warehouse tool in the Hadoop ecosystem is Apache Hive, which provides a metadata store so you can use the data lake like a data warehouse with a defined schema. You can run SQL queries on top of Hive and connect many other tools such Spark to run SQL queries using Spark SQL. Hive is an important tool inside the Hadoop ecosystem providing a centralized meta database for your analytical queries. Other tools such Apache Tajo are built on top of Hive to provide data warehousing capabilities in your data lake.
Apache Impalais a native analytic database for Hadoop which provides metadata store, you can still connect to Hive for metadata using Hcatalog.
Apache Phoenix has also a metastore and can work with Hive. Phoenix focuses on OLTP enabling queries with ACID properties to the transactions. It is flexible and provides schema-on-read capabilities from the NoSQL world by leveraging HBase as its backing store. ApacheDruid or Pinotalso provide metadata store.
Processing
The goal of this phase is to clean, normalize, process and save the data using a single schema. The end result is a trusted data set with a well defined schema.
Generally, you would need to do some kind of processing such as:
Validation: Validate data and quarantine bad data by storing it in a separate storage. Send alerts when a certain threshold is reached based on your data quality requirements.
Wrangling and Cleansing: Clean your data and store it in another format to be further processed, for example replace inefficient JSON with Avro.
Normalization and Standardization of values
Rename fields
…
Remember, the goal is to create a trusted data set that later can be used for downstream systems. This is a key role of a data engineer. This can be done in a stream or batch fashion.
The pipeline processing can be divided in three phases in case of batch processing:
Pre Processing Phase: If the raw data is not clean or not in the right format, you need to pre process it. This phase includes some basic validation, but the goal is to prepare the data to be efficiently processed for the next stage. In this phase, you should try to flatten the data and save it in a binary format such Avro. This will speed up further processing. The idea is that the next phase will perform row level operations, and nested queries are expensive, so flattening the data now will improve the next phase performance.
Trusted Phase: Data is validated, cleaned, normalized and transformed to a common schema stored in Hive. The goal is to create a trusted common data set understood by the data owners. Typically, a data specification is created and the role of the data engineer is to apply transformations to match the specification. The end result is a data set in Parquet format that can be easily queried. It is critical that you choose the right partitions and optimize the data to perform internal queries. You may want to partially pre compute some aggregations at this stage to improve query performance.
Reporting Phase: This step is optional but often required. Unfortunately, when using a data lake, a single schema will not serve all use cases; this is one difference between a data warehouse and data lake. Querying HDFS is not as efficient as a database or data warehouse, so further optimizations are required. In this phase, you may need to denormalize the data to store it using different partitions so it can be queried more efficiently by the different stakeholders. The idea is to create different views optimized for the different downstream systems (data marts). In this phase you can also compute aggregations if you do not use an OLAP engine (see next section). The trusted phase does not know anything about who will query the data, this phase optimizes the data for the consumers. If a client is highly interactive, you may want to introduce a fast storage layer in this phase like a relational database for fast queries. Alternatively you can use OLAP engines which we will discuss later.
For streaming the logic is the same but it will run inside a defined DAG in a streaming fashion. Spark allows you to join stream with historical data but it has some limitations. We will discuss later on OLAP engines, which are better suited to merge real time with historical data.
Processing Frameworks
Some of the tools you can use for processing are:
Apache Spark: This is the most well known framework for batch processing. Part of the Hadoop ecosystem, it is a managed cluster which provides incredible parallelism, monitoring and a great UI. It also supports stream processing (structural streaming). Basically Spark runs MapReduce jobs in memory increasing up to 100x times regular MapReduce performance. It integrates with Hive to support SQL and can be used to create Hive tables, views or to query data. It has lots of integrations, supports many formats and has a huge community. It is supported by all cloud providers. It can run on YARN as part of a Hadoop cluster but also in Kubernetes and other platforms. It has many libraries for specific use cases such SQL or machine learning.
Apache Flink: The first engine to unify batch and streaming but heavily focus on streaming. It can be used as a backbone for microservices like Kafka. It can run on YARN as part of a Hadoop cluster but since its inception has been also optimized for other platforms like Kubernetes or Mesos. It is extremely fast and provides real time streaming, making it a better option than Spark for low latency stream processing, especially for stateful streams. It also has libraries for SQL, Machine Learning and much more.
Apache Storm: Apache Storm is a free and open source distributed real-time computation system.It focuses on streaming and it is a managed solution part of the Hadoop ecosystem. It is scalable, fault-tolerant, guarantees your data will be processed, and is easy to set up and operate.
Apache Samza: Another great stateful stream processing engine. Samza allows you to build stateful applications that process data in real-time from multiple sources including Apache Kafka. Managed solution part of the Hadoop Ecosystem that runs on top of YARN.
Apache Beam: Apache Beam it is not an engine itself but a specification of an unified programming model that brings together all the other engines. It provides a programming model that can be used with different languages, so developers do not have to learn new languages when dealing with big data pipelines. Then, it plugs different back ends for the processing step that can run on the cloud or on premises. Beam supports all the engines mentioned before and you can easily switch between them and run them in any platform: cloud, YARN, Mesos, Kubernetes. If you are starting a new project, I really recommend starting with Beam to be sure your data pipeline is future proof.
By the end of this processing phase, you have cooked your data and is now ready to be consumed!, but in order to cook the chef must coordinate with his team…
Orchestration
Data pipeline orchestration is a cross cutting process which manages the dependencies between all the other tasks. If you use stream processing, you need to orchestrate the dependencies of each streaming app, for batch, you need to schedule and orchestrate the jobs.
Tasks and applications may fail, so you need a way to schedule, reschedule, replay, monitor, retry and debug your whole data pipeline in an unified way.
Newer frameworks such Dagster or Prefect add more capabilities and allow you to track data assets adding semantics to your pipeline.
Some of the options are:
Apache Oozie: Oozie it’s a scheduler for Hadoop, jobs are created as DAGs and can be triggered by time or data availability. It has integrations with ingestion tools such as Sqoop and processing frameworks such Spark.
Apache Airflow: Airflow is a platform that allows to schedule, run and monitor workflows. Uses DAGs to create complex workflows. Each node in the graph is a task, and edges define dependencies among the tasks. Airflow scheduler executes your tasks on an array of workers while following the specified dependencies described by you. It generates the DAG for you maximizing parallelism. The DAGs are written in Python, so you can run them locally, unit test them and integrate them with your development workflow. It also supports SLAs and alerting. Luigi is an alternative to Airflow with similar functionality but Airflow has more functionality and scales up better than Luigi.
Dagsteris a newer orchestrator for machine learning, analytics, and ETL. The main different is that you can track the inputs and outputs of the data, similar to Apache NiFicreating a data flow solution. You can also materialize other values as part of your tasks. It can also run several jobs in parallel, it is easy to add parameters, easy to test, provides simple versioning and much more. It is still a bit immature and due to the fact that it needs to keep track the data, it may be difficult to scale, which is a problem shared with NiFi.
Prefectis similar to Dagster, provides local testing, versioning, parameter management and much more. What makes Prefect different from the rest is that aims to overcome the limitations of Airflowexecution engine such as improved scheduler, Parametrized workflows, dynamic workflows, versioning and improved testing. It has an core open source workflow management system and also a cloud offering which requires no setup at all.
Apache NiFi: NiFi can also schedule jobs, monitor, route data, alert and much more. It is focused on data flow but you can also process batches. It runs outside of Hadoop but can trigger Spark jobs and connect to HDFS/S3.
In short, if your requirement is just orchestrate independent tasks that do not require to share data use Airflow or Ozzie. For data flow applications that require data lineage and tracking use NiFi for non developers or Dagster or Prefect for developers.
Data Quality
One important aspect in Big Data, often ignore is data quality and assurance. Companies loose every year tons of money because of data quality issues. The problem is that this is still an immature field in data science, developers have been working on this area for decades and they have great test frameworks and methodologies such BDD or TDD, but how do you test your pipeline?
There are two common problems in this field:
Misunderstood requirements: Quite often the transformation and orchestration logic can become very complex. Business Analyst may write requirements using their domain language which needs to be interpreted by developers who often make mistakes and plan, develop, test and deploy solutions who are technically correct but with the wrong requirements. These type of errors are very costly.
Data Validation: Pipeline testing is quite different from code. When developing software you test functions, it is black box testing, deterministic. For a given input you always get the same output. For data assets, testing is more complex: you need to assert data types, values, constraints and much more. Moreover, you need to apply aggregations to verify the data set to make sure that the number of rows or columns are corrects. For example, it is very hard to detect if one day you get a 10% drop on your data size, or if certain values correctly populated.
Companies are still at its infancy regarding data quality and testing, this creates a huge technical debt. I really recommend checking this article for more information.
To mitigate these issue, try to follow DDD principles and make sure that boundaries are set and a common language is used. Use frameworks that support data lineage like NiFi or Dagster.
Some tools focused on data quality are:
Apache Griffin: Part of the Hadoop Ecosystem, this tool offers an unified process to measure your data quality from different perspectives, helping you build trusted data assets. It provides a DSL that you can use to create assertions for your data and verify them as part of your pipeline. It is integrated with Spark. You can add rules and assertions for your data set and then run the validation as a Spark job. The problem with Griffin is the fact that the DSL can become difficult to manage(JSON) and it is hard to interpret by non- technical people which means it does not solve the misunderstood requirements issue.
Great Expectations:This is a newer tool written in Python and focused on data quality, pipeline testing and quality assurance. It can be easily integrated with Airflow or other orchestration tools and provide automated data validation. What set this tool apart is the fact that is human readable and can be used by data analyst, BAs and developers. It provides a intuitive UI but also full automation so you can run the validations as part of your production pipeline and view the results in a nice UI. The assertions can be written by non technical people using Notebooks which provide documentation and formal requirements that developers can easily understand, translate to code and use for testing. BAs or testers write the data assertions (Expectations) which are transformed to human readable test in the UI so everyone can see them and verify them. It can also do data profiling to generate some assertions for you. It can connect directly to your databases or file systems on-prem or in the cloud. It is very easy to use and to manage. The expectations can be committed to the source code repository and then integrated in your pipeline. Great Expectations creates a common language and framework for all parties involved in data quality, making it veryeasy to automate and test your pipeline with minimal effort.
Query your data
Now that you have your cooked recipe, it is time to finally get the value from it. By this point, you have your data stored in your data lake using some deep storage such HDFS in a queryable format such Parquet or in a OLAP database.
There are a wide range of tools used to query the data, each one has its advantages and disadvantages. Most of them focused on OLAP but few are also optimized for OLTP. Some use standard formats and focus only on running the queries whereas others use their own format/storage to push processing to the source to improve performance. Some are optimized for data warehousing using star or snowflake schema whereas others are more flexible. To summarize these are the different considerations:
Data warehouse vs data lake
Hadoop vs Standalone
OLAP vs OLTP
Query Engine vs. OLAP Engines
We should also consider processing engines with querying capabilities.
Processing Engines
Most of the engines we described in the previous section can connect to the metadata server such as Hive and run queries, create views, etc. This is a common use case to create refined reporting layers.
Spark SQL provides a way to seamlessly mix SQL queries with Spark programs, so you can mix the DataFrame API with SQL. It has Hive integration and standard connectivity through JDBC or ODBC; so you can connect Tableau, Looker or any BI tool to your data through Spark.
Apache Flink also provides SQL API. Flink’s SQL support is based on Apache Calcite which implements the SQL standard. It also integrates with Hive through the HiveCatalog. For example, users can store their Kafka or ElasticSearch tables in Hive Metastore by using HiveCatalog, and reuse them later on in SQL queries.
Query Engines
This type of tools focus on querying different data sources and formats in an unified way. The idea is to query your data lake using SQL queries like if it was a relational database, although it has some limitations. Some of these tools can also query NoSQL databases and much more. These tools provide a JDBC interface for external tools, such as Tableau or Looker, to connect in a secure fashion to your data lake. Query engines are the slowest option but provide the maximum flexibility.
Apache Pig: It was one of the first query languages along with Hive. It has its own language different from SQL. The salient property of Pig programs is that their structure is amenable to substantial parallelization, which in turns enables them to handle very large data sets. It is now in decline in favor of newer SQL based engines.
Presto: Released as open source by Facebook, it’s an open source distributed SQL query engine for running interactive analytic queries against data sources of all sizes. Presto allows querying data where it lives, including Hive, Cassandra, relational databases and file systems. It can perform queries on large data sets in a manner of seconds. It is independent of Hadoop but integrates with most of its tools, especially Hive to run SQL queries.
Apache Drill: Provides a schema-free SQL Query Engine for Hadoop, NoSQL and even cloud storage. It is independent of Hadoop but has many integrations with the ecosystem tools such Hive. A single query can join data from multiple datastores performing optimizations specific to each data store. It is very good at allowing analysts to treat any data like a table, even if they are reading a file under the hood. Drill supports fully standard SQL. Business users, analysts and data scientists can use standard BI/analytics tools such as Tableau, Qlik and Excel to interact with non-relational datastores by leveraging Drill’s JDBC and ODBC drivers. Furthermore, developers can leverage Drill’s simple REST API in their custom applications to create beautiful visualizations.
OLTP Databases
Although, Hadoop is optimized for OLAP there are still some options if you want to perform OLTP queries for an interactive application.
HBasehas very limited ACID properties by design, since it was built to scale and does not provides ACID capabilities out of the box but it can be used for some OLTP scenarios.
Apache Phoenix is built on top of HBase and provides a way to perform OTLP queries in the Hadoop ecosystem. Apache Phoenix is fully integrated with other Hadoop products such as Spark, Hive, Pig, Flume, and Map Reduce. It also can store metadata and it supports table creation and versioned incremental alterations through DDL commands. It is quite fast, faster than using Drill or other query engine.
You may use any massive scale database outside the Hadoop ecosystem such as Cassandra, YugaByteDB, ScyllaDB for OTLP.
Finally, it is very common to have a subset of the data, usually the most recent, in a fast database of any type such MongoDB or MySQL. The query engines mentioned above can join data between slow and fast data storage in a single query.
Distributed Search Indexes
These tools provide a way to store and search unstructured text data and they live outside the Hadoop ecosystem since they need special structures to store the data. The idea is to use an inverted index to perform fast lookups. Besides text search, this technology can be used for a wide range of use cases like storing logs, events, etc. There are two main options:
Solr: it is a popular, blazing-fast, open source enterprise search platform built on Apache Lucene. Solr is reliable, scalable and fault tolerant, providing distributed indexing, replication and load-balanced querying, automated failover and recovery, centralized configuration and more. It is great for text search but its use cases are limited compared to ElasticSearch.
ElasticSearch: It is also a very popular distributed index but it has grown into its own ecosystem which covers many use cases like APM, search, text storage, analytics, dashboards, machine learning and more. It is definitely a tool to have in your toolbox either for DevOps or for your data pipeline since it is very versatile. It can also store and search videos and images.
ElasticSearch can be used as a fast storage layer for your data lake for advanced search functionality. If you store your data in a key-value massive database, like HBase or Cassandra, which provide very limited search capabilities due to the lack of joins; you can put ElasticSearch in front to perform queries, return the IDs and then do a quick lookup on your database.
It can be used also for analytics; you can export your data, index it and then query it using Kibana, creating dashboards, reports and much more, you can add histograms, complex aggregations and even run machine learning algorithms on top of your data. The Elastic Ecosystem is huge and worth exploring.
OLAP Databases
In this category we have databases which may also provide a metadata store for schemas and query capabilities. Compared to query engines, these tools also provide storage and may enforce certain schemas in case of data warehouses (star schema). These tools use SQL syntax and Spark and other frameworks can interact with them.
Apache Hive: We already discussed Hive as a central schema repository for Spark and other tools so they can use SQL, but Hive can also store data, so you can use it as a data warehouse. It can access HDFS or HBase. When querying Hive it leverages on Apache Tez, Apache Spark, or MapReduce, being Tez or Spark much faster. It also has a procedural language called HPL-SQL.
Apache Impala: It is a native analytic database for Hadoop, that you can use to store data and query it in an efficient manner. It can connect to Hive for metadata using Hcatalog. Impala provides low latency and high concurrency for BI/analytic queries on Hadoop (not delivered by batch frameworks such as Apache Hive). Impala also scales linearly, even in multitenant environments making a better alternative for queries than Hive. Impala is integrated with native Hadoop security and Kerberos for authentication, so you can securely managed data access. It uses HBase and HDFS for data storage.
Apache Tajo: It is another data warehouse for Hadoop. Tajo is designed for low-latency and scalable ad-hoc queries, online aggregation, and ETL on large-data sets stored on HDFS and other data sources. It has integration with HiveMetastore to access the common schemas. It has many query optimizations, it is scalable, fault tolerant and provides a JDBC interface.
Apache Kylin: Apache Kylin is a newer distributed Analytical Data Warehouse. Kylin is extremely fast, so it can be used to complement some of the other databases like Hive for use cases where performance is important such as dashboards or interactive reports, it is probably the best OLAP data warehouse but it is more difficult to use, another problem is that because of the high dimensionality, you need more storage. The idea is that if query engines or Hive are not fast enough, you can create a “Cube” in Kylin which is a multidimensional table optimized for OLAP with pre computed values which you can query from your dashboards or interactive reports. It can build cubes directly from Spark and even in near real time from Kafka.
OLAP Engines
In this category, I include newer engines that are an evolution of the previous OLAP databases which provide more functionality creating an all-in-one analytics platform. Actually, they are a hybrid of the previous two categories adding indexing to your OLAP databases. They live outside the Hadoop platform but are tightly integrated. In this case, you would typically skip the processing phase and ingest directly using these tools.
They try to solve the problem of querying real time and historical data in an uniform way, so you can immediately query real-time data as soon as it’s available alongside historical data with low latency so you can build interactive applications and dashboards. These tools allow in many cases to query the raw data with almost no transformation in an ELT fashion but with great performance, better than regular OLAP databases.
What they have in common is that they provided a unified view of the data, real time and batch data ingestion, distributed indexing, its own data format, SQL support, JDBC interface, hot-cold data support, multiple integrations and a metadata store.
Apache Druid: It is the most famous real time OLAP engine. It focused on time series data but it can be used for any kind of data. It uses its own columnar format which can heavily compress the data and it has a lot of built in optimizations like inverted indices, text encoding, automatic data roll up and much more. Data is ingested in real time using Tranquility or Kafka which has very low latency, data is kept in memory in a row format optimized for writes but as soon as it arrives is available to be query just like previous ingested data. A background task in in charge of moving the data asynchronously to a deep storage system such HDFS. When data is moved to deep storage it is converted into smaller chunks partitioned by time called segments which are highly optimized for low latency queries. Each segment has a timestamp, several dimensions which you can use to filter and perform aggregations; and metrics which are pre computed aggregations. For batch ingestion, it saves data directly into Segments. It support push and pull ingestion. It has integrations with Hive, Spark and even NiFi. It can use Hive metastore and it supports Hive SQL queries which then are converted to JSON queries used by Druid. The Hive integration supports JDBC so you can connect any BI tool. It also has its own metadata store, usually MySQL. It can ingest vast amounts of data and scale very well. The main issue is that it has a lot of components and it is difficult to manage and deploy.
Apache Pinot: It is a newer alternative to Druid open sourced by LinkedIn. Compared to Druid, it offers lower latency thanks to the Startree index which offer partial pre computation, so it can be used for user facing apps(it’s used to get the LinkedIn feeds). It uses a sorted index instead of inverted index which is faster. It has an extendable plugin architecture and also has many integrations but does not support Hive. It also unifies batch and real time, provides fast ingestion, smart index and stores the data in segments. It is easier to deploy and faster compared to Druid but it is a bit immature at the moment.
ClickHouse: Written in C++, this engine provides incredible performance for OLAP queries, especially aggregations. It looks like a relational database so you can model the data very easily. It is very easy to set up and has many integrations.
Check this article which compares the 3 engines in detail. Again, start small and know your data before making a decision, these new engines are very powerful but difficult to use. If you can wait a few hours, then use batch processing and a data base such Hive or Tajo; then use Kylin to accelerate your OLAP queries to make them more interactive. If that’s not enough and you need even lower latency and real time data, consider OLAP engines. Druid is more suitable for real-time analysis. Kylin is more focused on OLAP cases. Druid has good integration with Kafka as real-time streaming; Kylin fetches data from Hive or Kafka in batches; although real time ingestion is planned for the near future.
Finally, Greenplum is another OLAP engine with more focus on AI.
Finally, for visualization you have several commercial tools such Qlik, Looker or Tableau. For Open Source, check SuperSet, an amazing tool that support all the tools we mentioned, has a great editor and it is really fast. Metabase or Falcon are other great options.
Conclusion
We have talked a lot about data: the different shapes, formats, how to process it, store it and much more. Remember: Know your data and your business model. Use an iterative process and start building your big data platform slowly; not by introducing new frameworks but by asking the right questions and looking for the best tool which gives you the right answer.
Review the different considerations for your data, choose the right storage based on the data model (SQL), the queries(NoSQL), the infrastructure and your budget. Remember to engage with your cloud provider and evaluate cloud offerings for big data(buy vs. build). It is very common to start with a Serverless analysis pipeline and slowly move to open source solutions as costs increase.
Data Ingestion is critical and complex due to the dependencies to systems outside of your control; try to manage those dependencies and create reliable data flows to properly ingest data. If possible have other teams own the data ingestion. Remember to add metrics, logs and traces to track the data. Enable schema evolution and make sure you have setup proper security in your platform.
Use the right tool for the job and do not take more than you can chew. Tools like Cassandra, Druid or ElasticSearch are amazing technologies but require a lot of knowledge to properly use and manage. If you just need to OLAP batch analysis for ad-hoc queries and reports, use Hive or Tajo. If you need better performance, add Kylin. If you also need to join with other data sources add query engines like Drill or Presto. Furthermore, if you need to query real time and batch use ClickHouse, Druid or Pinot.
Feel free to get in touch if you have any questions or need any advice.
I hope you enjoyed this article. Feel free to leave a comment or share this post. Follow mefor future post.